Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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
dplyr按行变异,无需硬编码名称_R_Dplyr - Fatal编程技术网

dplyr按行变异,无需硬编码名称

dplyr按行变异,无需硬编码名称,r,dplyr,R,Dplyr,我想做这样的事情 df <- iris %>% rowwise %>% mutate(new_var = sum(Sepal.Length, Sepal.Width)) df% 行%>% 变异(新值=总和(萼片长度,萼片宽度)) 除非我不想输入变量名,例如 names_to_add <- c("Sepal.Length", "Sepal.Width") df <- iris %>% rowwise %>% [some function t

我想做这样的事情

df <- iris %>%
  rowwise %>%
  mutate(new_var = sum(Sepal.Length, Sepal.Width))
df%
行%>%
变异(新值=总和(萼片长度,萼片宽度))
除非我不想输入变量名,例如

names_to_add <- c("Sepal.Length", "Sepal.Width")
df <- iris %>%
  rowwise %>%
[some function that uses names_to_add]
名称添加%
[使用名称添加的某些函数]
我尝试了几件事

df <- iris %>%
  rowwise %>%
  mutate(new_var = sum(sapply(names_to_add, get, envir = as.environment(.))))
df%
行%>%
mutate(new_var=sum(sappy(names_to_add,get,envir=as.environment())

但还是不明白。我会选择一个与懒散有关的答案,或者更简单的答案。注意这里的
sum
函数只是一个占位符,我的实际函数要复杂得多,尽管它每行返回一个值。我也不想使用
数据。表

您应该在
dplyr
中检查所有以
\uuUcode>结尾的函数。示例
变异
总结

names_to_add <- ("sum(Sepal.Length, Sepal.Width)")   

df <- iris %>%
  rowwise %>% mutate_(names_to_add)
names_to_add%mutate_(names_to_add)

编辑

代码的结果:

df <- iris %>%
 rowwise %>% mutate(new_var = sum(Sepal.Length, Sepal.Width))

names_to_add <- ("sum(Sepal.Length, Sepal.Width)")   

df2 <- iris %>%
    rowwise %>% mutate_(new_var = names_to_add)

identical(df, df2)
[1] TRUE
df%
行%>%突变(新的变量=总和(萼片长度,萼片宽度))
名称\u到\u添加%mutate\u(新的\u变量=名称\u到\u添加)
相同(df,df2)
[1] 真的
编辑 我编辑了答案,它解决了问题。我想知道为什么没有投票。我们使用SE(标准评估),将字符串作为输入传递到“mutate_”中。更多信息:
vignette(“nse”、“dplyr”)


简单的基础R-
iris$new_var@organic龙舌兰我编辑了我的答案。我得到的输出与第一行代码相同。你尝试了吗?嗨,有机龙舌兰,如果这个或任何答案解决了你的问题,请考虑通过点击复选标记来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
x <- "Sepal.Length + Sepal.Width"
df <- mutate_(iris, x)
head(df)
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length + Sepal.Width
1          5.1         3.5          1.4         0.2  setosa                        8.6
2          4.9         3.0          1.4         0.2  setosa                        7.9
3          4.7         3.2          1.3         0.2  setosa                        7.9
4          4.6         3.1          1.5         0.2  setosa                        7.7
5          5.0         3.6          1.4         0.2  setosa                        8.6
6          5.4         3.9          1.7         0.4  setosa                        9.3