当尝试在 group_by 内使用 get() 调用对象并进行变异时,它会调出整个对象而不是分组的对象。我该如何解决?

When trying to call an object with get() within group_by and mutate, it brings up the entire object and not the grouped object. How do I fix this?

这是我的代码:

data(iris)
spec<-names(iris[1:4])
iris$Size<-factor(ifelse(iris$Sepal.Length>5,"A","B"))
for(i in spec){
  attach(iris)
  output<-iris %>%
    group_by(Size)%>%
    mutate(
  out=mean(get(i)))
  detach(iris)
}

for 循环是围绕一些在各个部分使用对象 'i' 的图形和报告编写而编写的。我正在使用 dplyr 和 plyr。

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species Size      out
1           5.1         3.5          1.4         0.2  setosa    A 1.199333
2           4.9         3.0          1.4         0.2  setosa    B 1.199333
3           4.7         3.2          1.3         0.2  setosa    B 1.199333
4           4.6         3.1          1.5         0.2  setosa    B 1.199333
5           5.0         3.6          1.4         0.2  setosa    B 1.199333

注意变量 'out' 如何具有相同的均值,即整个数据集的均值而不是分组均值。

> tapply(iris$Petal.Width,iris$Size,mean)
       A        B 
1.432203 0.340625 
> mean(iris$Petal.Width)
[1] 1.199333

使用 get()attach()dplyr 并不完全一致,因为它确实扰乱了评估函数的环境。如 NSE 小插图 (vignette("nse", package="dplyr"))

中所述,最好在此处使用相当于 mutate 的标准评估
for(i in spec){
  output<-iris %>%
    group_by(Size)%>%
    mutate_(.dots=list(out=lazyeval::interp(~mean(x), x=as.name(i))))
    # print(output)
}