問題タブ [nse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - R は関数を標準評価と非標準評価の両方に対してロバストにする
column
に依存するデータフレームのユーザー定義を検索する小さな関数がありますdplyr
。以下の現在の形式では、非標準評価で列引数を受け入れます-引用符なしで(たとえば、標準評価scenario
の代わりに"scenario"
)。
ユーザーが列名をどのように入力しても、つまり標準または非標準の評価で関数を機能させる方法はありますか?
r - Rの関数内でdplyr/magrittrのパイプを使用するにはどうすればよいですか?
データフレームと関数の名前を引数として取る関数を作成しようとしています。標準の R 構文で関数を記述しようとすると、 http: //adv-r.had.co.nz/Computing-on-the-language.html で @hadley が推奨するように、eval
andを使用して良い結果を得ることができます。substitute
ここで、演算子を使用して同じ関数を記述しようとすると、機能し%>%
ません:
eval
パイプ演算子とandを組み合わせて使用するにはどうすればよいsubstitute
ですか? 私には本当に難しいようです。
r - dplyr の do() を使用した複雑な式の NSE
変数参照が".$mpg"
.
hereを読んだ後、変数名を与える文字列があるので、 as.name を使用するとそれができると思いました。
たとえば、これは機能します:
これは機能しません:
しかし、これは:
そしてこれもそうです:
.$mpg
次の例のように、データにドットを指定するオプションがない場合に do() で使用できるように、フォームで変数を指定できるようにしたいと考えています。
- prop.test 関数がどのように機能するかを示すためにここで確率変数を選択しましたが、これをテストの誤用と解釈しないでください。
最終的には、これを次のような関数に変換したいと考えています。
私はもともと次のようなことをしなければならないと思っていました:
interp(~var, var = as.name(miles)
wheremiles
は に置き換えられますが.$mpg
、上で述べたように、これはうまくいかないようです。
r - dplyr::filter に引数を渡して関数を作成する nse を回避する最善の方法は何ですか?
非標準評価は、dplyr の動詞を使用する場合に非常に便利です。しかし、関数の引数でこれらの動詞を使用すると問題が発生する可能性があります。たとえば、特定の種の行数を取得する関数を作成したいとします。
例が機能しない
species
この関数は、関数の引数のコンテキストではなく、アイリス データ フレームのコンテキストで解釈されるため、期待どおりに動作しません。
3つの実装例
非標準の評価を回避するために、通常は引数にアンダースコアを追加します。
関数の引数の名前を使いにくい名前に変更するため、完全に満足できるものではありません。または、オートコンプリートに依存していますが、これはプログラミングの良い習慣ではありません。素敵な引数名を保持するには、次のようにします。
この回答に基づいて非標準評価を回避する別の方法。
関数環境のコンテキストでinterp()
解釈します。species
上記の 3 つの関数を考慮して、このフィルター関数を実装するための推奨される (最も堅牢な) 方法は何ですか? 他の方法はありますか?
r - magrittr 逆パイプを使用した非標準評価構文の記述
コードを単純化する簡単な方法を検討しています。
例
このsqrt
関数は、以下の列のサブセットに簡単に適用できます。
問題
サブセット シーケンス全体を再度入力する必要なく、サブセットに他の変換を適用することに関心があります。
たとえば、コード:
エラーが返されます:
を使用した構文と同じ.
です。私の質問は次のとおりです。構文的には、関数と同じ効果を得るにはどうすればよいsqrt
ですが、渡されたサブセットに長い関数を適用できますか?
r - dplyr mutate との評価順序の不一致
mutate 呼び出し内で使用する関数が 2 つあります。1 つは期待どおりに行ごとの結果を生成し、もう 1 つはすべての行に対して同じ値を繰り返します。
次のようなものを生成します。
つまり、d
列は変化しますv
が一定であり、その値は実際にはどの行のX
およびY
の値にも対応しません。
これは NSE に関連していると思われますが、どのようにしてそれを知ることができたのかわかりません。
div
との異なる動作の原因は何pv
ですか? どうすれば修正できますpv
か?