Я пытаюсь смешивать константы и имена цитируемых переменных, как это предлагается в нестандартной виньетизации, используя 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)
Если две функции не имеют одинаковых результатов?