我希望能够基于提供给函数...
部分的名称来创建字符向量。
例如,如果我具有函数foo(...)
并键入foo(x, y)
,如何创建看起来像c("x", "y")
的字符向量?
我最想知道如何使用rlang
,但是base
解决方案也很好。
答案 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.character
将NULL
转换为"NULL"
,而map_chr(..., as.character)
由于NULL
list
项而引发错误。