Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:理解mutate中的标准评估__R_Dplyr_Lazy Evaluation - Fatal编程技术网

R:理解mutate中的标准评估_

R:理解mutate中的标准评估_,r,dplyr,lazy-evaluation,R,Dplyr,Lazy Evaluation,我正在尝试混合使用常量和引用的变量名,正如使用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 na

我正在尝试混合使用常量和引用的变量名,正如使用
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)
请注意,我已将延迟计算的结果分配给字符向量(
“(怪异)变量名“
)。但是,当我将延迟计算的结果分配给
var\u name
时,该值被分配给一个名为
“var\u 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函数时,不能使用变量作为参数名(参数名指函数调用中
=
符号左侧的那些内容)。参数名称始终作为文字值。这两个是一样的

f(a=3)
f("a"=3)
或者看看

deparse(quote(f(a=3)))
# [1] "f(a = 3)"
deparse(quote(f("a"=3)))
# [1] "f(a = 3)"
a <- "b"
deparse(quote(f(a=3)))
# [1] "f(a = 3)"
这是因为这些都是等价的

df <- data_frame(a=1:10)
mutate(df, a=a+5)
mutate(df, "a"=a+5)  #identical to first, not really a character variable
mutate_(df, a=quote(a+5))
mutate_(df, .dots=list(a=quote(a+5)))
mutate_(df, .dots=setNames(list(quote(a+5)),"a"))
df
df <- data_frame(a=1:10)
mutate(df, a=a+5)
mutate(df, "a"=a+5)  #identical to first, not really a character variable
mutate_(df, a=quote(a+5))
mutate_(df, .dots=list(a=quote(a+5)))
mutate_(df, .dots=setNames(list(quote(a+5)),"a"))