Я хочу написать функцию 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
до того, как 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