後で使用するためにdplyr関数を「保存」できますか?

Aug 21 2020

これは好奇心の質問です---実際にこれを行う必要はありませんが、Rの準引用と整然とした評価機能を理解しようとしています。これは私に役立つと思います。

starwarsデータセットからドロイドをフィルタリングするとします。

library(dplyr)
library(rlang)

starwars %>% filter(species == "Droid")

filter通話を保存して後で再利用するようなことはできますか?これは、フィルタリングする条件が多数ある場合に簡潔にするのに役立ちます。何かのようなもの

filter_droid = some_quote(filter(species == "Droid"))

starwars %>% some_unquote(filter_droid)

もちろん、次のようにすることもできます。

cond = expr(species == "Droid")

starwars %>% filter(eval(cond))

ただし、複数の引数がある場合、このアイデアが常に機能するとは限りません。たとえば、で2つの新しい列を作成する場合mutate、これは機能しません。

new_cols = exprs(col1 = 1, col2 = 2)

starwars %>% mutate(eval(new_cols))

私は、スクリプトを書いていた場合、私が修正します、これはちょうど行う関数を定義することですmutate、私はそれをやって無視したい好奇心のために---私のために電話を。mutate/filter呼び出し、または少なくともその中の引数を「保存」して、後でコードでインタラクティブに使用するにはどうすればよいですか?

回答

4 MrFlick Aug 21 2020 at 12:38

あなたはそれを機能にすることができます

filt <- . %>% filter(species == "Droid")
starwars %>% filt

またはeval()、を使用するのではなく!!、単一のパラメーターを挿入するときに演算子を使用します

cond = expr(species == "Droid")
starwars %>% filter(!!cond)

または!!!複数を注入するために使用します。

new_cols = exprs(col1 = 1, col2 = 2)
starwars %>% mutate(!!!new_cols)