在R中的函数内取消引用参数

Posted

技术标签:

【中文标题】在R中的函数内取消引用参数【英文标题】:Unquoting argument inside of function in R 【发布时间】:2021-06-14 01:26:38 【问题描述】:

我无法弄清楚为什么我的函数中的 bang-bang 运算符没有取消引用我的 grp 参数。任何帮助将不胜感激!

library(dplyr)

test_func <- function(dat, grp)
  dat %>%
    group_by(!!grp) %>%
    summarise(N =  n())


test_func(dat = iris, grp = "Species")

它只是生成整个数据的摘要,而不是按物种分组:

【问题讨论】:

【参考方案1】:

如果我们传递一个字符串,则转换为symbol 并计算 (!!)

test_func <- function(dat, grp)
 dat %>%
    group_by(!! rlang::ensym(grp)) %>%
    summarise(N =  n(), .groups = 'drop')
 

-测试

test_func(dat = iris, grp = "Species")
# A tibble: 3 x 2
#  Species        N
#* <fct>      <int>
#1 setosa        50
#2 versicolor    50
#3 virginica     50

或者另一种选择是使用across

test_func <- function(dat, grp)
    dat %>%
       group_by(across(all_of(grp))) %>%
       summarise(N =  n(), .groups = 'drop')
 

【讨论】:

以上是关于在R中的函数内取消引用参数的主要内容,如果未能解决你的问题,请参考以下文章

函数R中的Dplyr变量名称

在 Python/ctypes 中的结构内取消引用 C 函数指针

java中的值传递和引用传递

引用的 Julia 函数参数

值传递和引用传递

在 R 用户定义函数中传递数据参数