我想编写一个 R 函数arg2str
,它返回作为参数提供的符号的名称(即字符串向量)。
对于最简单的情况,我只有一个输入符号:
library ("rlang")
arg2str.v0 <- function (arg) rlang::quo_name (enquo (arg))
arg2str.v0 (a)
## [1] "a"
如果我有多个符号,我可以使用三点结构:
arg2str.v1 <- function (...) sapply (enquos (...), rlang::quo_name)
arg2str.v1 (a, b, c)
##
## "a" "b" "c"
(附属问题:为什么在这种情况下显示的字符串结果向量带有初步换行符而不是初步换行符[1]
?)
但我实际上想处理符号向量。然而:
sym2str.v1 (c(a, b, c))
##
## "c(a, b, c)"
我如何调整我的功能来做到这一点?
我的第一个直觉是首先通过 using 引用参数向量中包含的符号sapply
(而不是引用参数向量本身),然后应用于rlang::quo_name
得到的 quosures 向量。但似乎参数向量中的符号在对它们中的每一个调用sapply
之前都在内部进行了评估enquote
:
arg2str.v2 <- function (args) {
enquo_args <- sapply (args, enquo)
lapply (enquo_args, rlang::quo_name)
}
arg2str.v2 (c (a, b, c))
## Error in lapply(X = X, FUN = FUN, ...) : object 'a' not found