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

时间:2018-08-02 22:13:17

标签: r rlang

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

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

我最想知道如何使用rlang,但是base解决方案也很好。

1 个答案:

答案 0 :(得分:4)

你的意思是这样吗?

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

或者,我们可以直接在as.character返回的list上使用rlang::exprs

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项而引发错误。