R: векторизация dearse (заменить (х)) - PullRequest
2 голосов
/ 02 марта 2020

Я хочу векторизовать deparse(substitute(x)).

f <- function(...){
deparse(substitute(...))
}

f(a, b, c)

Это дает только первый элемент, "a", но я жду "a", "b", "c". Случайно я нашел это

f2 <- function(...){
deparse(substitute(...()))
}
f2(ab, b, c)

Это дает "pairlist(ab, b, c)". Теперь я могу удалить все, что мне не нужно, чтобы получить "a", "b", "c". Но это кажется не элегантным для меня. Есть ли способ векторизовать deparse (заменить (x))?

Я знаю, что есть вопрос с аналогичной проблемой, но ответ не включает deparse(substitute(x)).

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

match.call - хорошая отправная точка. Я бы посоветовал вам изучить все, что вы можете с этим сделать. Я верю, что это приведет вас туда, куда вы хотите:

f <- function(...){
    as.character(match.call(expand.dots = FALSE)[[2]])
}

и пример использования ...

f(hey, you)
[1] "hey" "you"
2 голосов
/ 02 марта 2020

Мы можем использовать match.call

f <- function(...) sapply(as.list(match.call())[-1], as.character)
f(a)
#[1] "a"
f(a, b)
#[1] "a" "b"
f(a, b, c)
#[1] "a" "b" "c"

Или используя substitute

f <- function(...) sapply(substitute(...()), deparse)
f(a)
#[1] "a"
f(a, b)
#[1] "a" "b"
f(a, b, c)
#[1] "a" "b" "c"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...