我想写一个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)"
我如何调整我的功能来做到这一点?
我的第一直觉是首先使用以下方法引用参数向量中包含的符号sapply
(而不是引用参数向量本身),然后应用rlang::quo_name
到结果向量。但似乎参数向量中的符号是在sapply
before 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