【发布时间】:2016-05-16 17:18:04
【问题描述】:
我正在尝试混合常量和带引号的变量名,正如Non-standard evaluation vignette 中所建议的那样,使用lazyeval::interp。
这是一个做我想做的例子:
# 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)
请注意,我已将惰性求值的结果分配给字符向量 ("(Weird) Variable name")。但是,当我将惰性求值的结果分配给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)
这两个函数不应该有相同的结果吗?
【问题讨论】:
标签: r dplyr lazy-evaluation