捕获......传递给函数而不会破坏!!操作者

时间:2018-01-30 13:46:48

标签: r tidyverse rlang

我需要将...转发给函数参数,将符号提取为代码,并将它们转换为字符,同时保留名称。我通常会使用match.call(expand.dots = FALSE)$...,但它会破坏!!运算符。

当前行为

f <- function(...){
  match.call(expand.dots = FALSE)$...
}

f(a = 1234, b = !!my_variable)

## $a
## [1] 1234
## 
## $b
## !(!my_variable)

期望的行为

f <- function(...){
  # whatever works
}

f(a = 1234, b = !!my_variable)

## $a
## [1] 1234
## 
## $b
## !!my_variable

编辑更好:

f <- function(...){
  # whatever works
}

my_variable <- "my value"
f(a = 1234, b = !!my_variable)

## $a
## [1] 1234
## 
## $b
## [1] "my_value"

1 个答案:

答案 0 :(得分:2)

以下代码似乎有效。用例是here。感谢MrFlick让我朝着正确的方向努力。

f <- function(...){
  rlang::exprs(...)
}

my_variable <- "my value"
f(a = 1234, b = !!my_variable)

## $a
## [1] 1234
## 
## $b
## [1] "my_value"

编辑:顺便说一句,我仍然在寻找一种解析!!而不进行评估的方法。这将增强与https://github.com/ropensci/drake/issues/200相关的用户端功能。