我正在努力理解将参数从函数传递到R函数的问题。我通常可以通过执行!! rlang :: sym(argument)使其正常工作。
我想做的是创建一个函数,让我可以自定义数据集中要对其进行给定比较计算的列。
例如,我可能想计算等于9999或大于5或小于或等于5的值的数量。此列也可能会更改。
custom_count=function(dataset, expr){
result=dataset %>% summarise( sum( !!rlang::sym(expr), na.rm = TRUE))
return(result)
}
custom_count(mtcars, 'mpg > 10')
custom_count( mtcars, 'vs==0')
但是,这些无效。无论如何,我是否需要同时传递字段+比较符号+值的组合?
答案 0 :(得分:1)
您要使用enexpr
,因为您要传递的是表达式,而不是符号:
library(dplyr)
custom_count=function(dataset, expr){
result=dataset %>% summarise( sum( !!rlang::enexpr(expr), na.rm = TRUE))
return(result)
}
custom_count(mtcars, mpg > 10)
# sum(mpg > 10, na.rm = TRUE)
# 1 32
custom_count( mtcars, vs==0)
# sum(vs == 0, na.rm = TRUE)
# 1 18
答案 1 :(得分:0)
这似乎对我有用。
custom_count=function(dataset, expr){
result=dataset %>% summarise( sum( !!expr, na.rm = TRUE))
return(result)
}
custom_count(mtcars, quote(mpg > 10))