lazyeval::interp
を使用してNon-standard evaluation vignetteで提案されているように、定数と引用された変数名を組み合わせようとしています。私は文字ベクトル("(Weird) Variable name"
)に遅延評価の結果を割り当てたR:mutate_の標準評価を理解する
# create sample dataset
df_foo = data_frame(
`(Weird) Variable name` = 100,
group_var = sample(c("Yes", "No"), size = 100, replace = TRUE)
)
# function to update the value of weirdly named variable
update_var_1 = function(var_name) {
df_foo %>%
mutate_(
"(Weird) Variable name" =
interp(quote(ifelse(group_var_val == "Yes", var_name_val/10, var_name_val/20)),
group_var_val = as.name("group_var"),
var_name_val = as.name(var_name))
)
}
# test the function
update_var_1("(Weird) Variable name") %>%
head(n = 20)
注:ここでは
は、私が何をしたいん例です。しかし、遅延評価の結果を"var_name"
というリテラルに割り当てられるvar_name
に割り当てると、誰かがこの行動を理解するのを助けることができる?
# function to update the value of weirdly named variable
update_var_2 = function(var_name) {
df_foo %>%
mutate_(
var_name =
interp(quote(ifelse(group_var_val == "Yes", var_name_val/10, var_name_val/20)),
group_var_val = as.name("group_var"),
var_name_val = as.name(var_name))
)
}
# test the function
update_var_2("(Weird) Variable name") %>%
head(n = 20)
2つの機能に同じ結果がありませんか?