如何解决在 dplyr 函数中按名称引用变量返回对象未找到错误
library(nycflights13)
library(dplyr)
sum.na <- function(df,x){df %>% summarise(n=sum(is.na(x)))}
sum.na(flights,arr_time)
当我运行上面的代码时,出现以下错误:
**Error in eval(cols[[col]],.data,parent.frame()) :
object 'arr_time' not found**
解决方法
使用 curl-curly ({{}}
) 将列名作为函数参数传递。
library(nycflights13)
library(dplyr)
sum.na <- function(df,x){df %>% summarise(n=sum(is.na({{x}})))}
sum.na(flights,arr_time)
# A tibble: 1 x 1
# n
# <int>
#1 8713
,
我们也可以将 ensym
与 !!
一起使用
library(nycflights13)
library(dplyr)
sum.na <- function(df,x) {
df %>%
summarise(n = sum(is.na(!! ensym(x))))
}
既可以引用也可以不引用
sum.na(flights,arr_time)
# A tibble: 1 x 1
# n
# <int>
#1 8713
sum.na(flights,'arr_time')
# A tibble: 1 x 1
# n
# <int>
#1 8713
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。