Ich versuche, Konstanten und zitierte Variablennamen zu mischen, wie in der Non-standard evaluation vignette unter Verwendung lazyeval::interp
vorgeschlagen. HierR: Grundlegendes zur Standardauswertung in mutate_
ist ein Beispiel, das tut, was ich will:
# 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)
Bitte beachten, dass ich das Ergebnis der lazy evaluation den Zeichenvektor zugeordnet habe ("(Weird) Variable name"
). Allerdings, wenn ich das Ergebnis der Lazy-Auswertung var_name
zuweisen, die einem Literal namens "var_name"
zugewiesen wird. Kann jemand helfen, dieses Verhalten zu verstehen?
# 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)
Sollten die beiden Funktionen nicht identische Ergebnisse haben?