使用 rlang,将 `...` 的内容转换为字符向量

With rlang, convert contents of `...` to a character vector

我希望能够根据提供给函数 ... 部分的名称创建字符向量。

例如,如果我有函数 foo(...) 并键入 foo(x, y),我如何创建一个看起来像 c("x", "y") 的字符向量?

我最感兴趣的是弄清楚如何为此使用 rlang,但是 base 解决方案也很棒。

你的意思是这样的吗?

foo <- function(...) unname(purrr::map_chr(rlang::exprs(...), as.character))
foo(x, y)
#[1] "x" "y"

identical(foo(x, y), c("x", "y"))
#[1] TRUE

或者我们可以直接在从 rlang::exprs

返回的 list 上使用 as.character
foo <- function(...) as.character(rlang::exprs(...))

在回答@joran 的问题时,说实话我不确定;考虑以下情况

as.character(rlang::exprs(NULL, a, b))
#[1] "NULL" "a" "b"

map_chr(rlang::exprs(NULL, a, b), as.character)
#Error: Result 1 is not a length 1 atomic vector

因此 as.characterNULL 转换为 "NULL"map_chr(..., as.character) 会因 NULL list 条目而引发错误。