の関数内で変数名を文字列として使用したいですdplyr
。以下の例を参照してください。
df <- data.frame(
color = c("blue", "black", "blue", "blue", "black"),
value = 1:5)
filter(df, color == "blue")
color
完璧に動作しますが、次のような文字列で参照したいと思います。
var <- "color"
filter(df, this_probably_should_be_a_function(var) == "blue").
どのような手段を使ってもこれを実現できれば嬉しいですし、読みやすいdplyr
構文を利用できればとても嬉しいです。
ベストアンサー1
新しいバージョンでは、変数を引用符で囲んで作成し、評価時に引用符を解除(UQ
または!!
)することができます。
var <- quo(color)
filter(df, UQ(var) == "blue")
# color value
#1 blue 1
#2 blue 3
#3 blue 4
演算子の優先順位により、()
ラップアラウンドが必要になる場合があります。!!
filter(df, (!!var) == "blue")
# color value
#1 blue 1
#2 blue 3
#3 blue 4
新しいバージョンでは||
優先順位が高くなるため、
filter(df, !! var == "blue")
動作するはずです(@Moody_Mudskipper のコメントどおり)
古いオプション
以下のものも使用される場合があります:
filter(df, get(var, envir=as.environment(df))=="blue")
#color value
#1 blue 1
#2 blue 3
#3 blue 4
編集: 解決策の順序を変更しました