R 3.5.2:自定义函数内的管道-对象';列';找不到

R 3.5.2:自定义函数内的管道-对象';列';找不到,r,dplyr,pipe,chaining,R,Dplyr,Pipe,Chaining,我在自定义函数中遇到管道问题。根据前面的文章,我知道函数中的管道会创建另一个级别(?),这会导致我得到的错误(见下文) 我希望为包含数百个数值和分类变量的大型数据集编写一个摘要函数。我希望可以选择在不同的数据帧(具有类似的结构)上使用它,始终按某个因子变量分组,并获得多个列的摘要 library(tidyverse) data(iris) iris %>% group_by(Species) %>% summarise(count = n(), mean = mean(Sepal.

我在自定义函数中遇到管道问题。根据前面的文章,我知道函数中的管道会创建另一个级别(?),这会导致我得到的错误(见下文)

我希望为包含数百个数值和分类变量的大型数据集编写一个摘要函数。我希望可以选择在不同的数据帧(具有类似的结构)上使用它,始终按某个因子变量分组,并获得多个列的摘要

library(tidyverse)
data(iris)

iris %>% group_by(Species) %>% summarise(count = n(), mean = mean(Sepal.Length, na.rm = T))

# A tibble: 3 x 3
  Species    count  mean
  <fct>      <int> <dbl>
1 setosa        50  5.01
2 versicolor    50  5.94
3 virginica     50  6.59
这个问题我已经有一段时间了,尽管我在之前的几篇文章中试图找到答案,但我还没有完全理解为什么会出现这个问题以及如何解决它


任何帮助都将不胜感激,谢谢

尝试搜索非标准评估(NSE)

您可以在这里使用
{{}
让R知道
col
df
中的列名

library(dplyr)
library(rlang)

sum_cols <- function (df, col) { 
  df %>% 
    group_by(Species) %>% 
    summarise(count = n(), mean = mean({{col}}, na.rm = T)) 
  }

sum_cols(iris, Sepal.Length)

# A tibble: 3 x 3
#  Species    count  mean
#  <fct>      <int> <dbl>
#1 setosa        50  5.01
#2 versicolor    50  5.94
#3 virginica     50  6.59

您可能会发现本指南很有用:谢谢您的帮助!不幸的是,我仍然得到同样的错误。知道为什么吗?@Karina您是否安装了
rlang
0.4.0或更高版本?用
library(rlang)
加载库,然后试试这个。我有0.3.1-我有一台工作计算机,很遗憾,安装和更新软件包不是我的事。我在我的个人电脑上试过,效果很好,所以旧版本似乎有问题。好的……更新了答案,应该也能用。
sum_cols(iris, Sepal.Length)

Error in mean(col, na.rm = T) : object 'Petal.Width' not found
Called from: mean(col, na.rm = T)
library(dplyr)
library(rlang)

sum_cols <- function (df, col) { 
  df %>% 
    group_by(Species) %>% 
    summarise(count = n(), mean = mean({{col}}, na.rm = T)) 
  }

sum_cols(iris, Sepal.Length)

# A tibble: 3 x 3
#  Species    count  mean
#  <fct>      <int> <dbl>
#1 setosa        50  5.01
#2 versicolor    50  5.94
#3 virginica     50  6.59
sum_cols <- function (df, col) { 
   df %>% 
     group_by(Species) %>% 
     summarise(count = n(), mean = mean(!!enquo(col), na.rm = T)) 
}

sum_cols(iris, Sepal.Length)