Вот функция, которая сделает это за вас, которая также позволяет вам произвольно назвать некоторые значения. В этом нет ничего особенного, кроме уловки, чтобы получить неоцененное выражение и преобразовать его в один символьный вектор.
c2 <- function(...) {
vals <- c(...)
if (is.null(names(vals))) {
missing_names <- rep(TRUE, length(vals))
} else {
missing_names <- names(vals) == ""
}
if (any(missing_names)) {
names <- vapply(substitute(list(...))[-1], deparse, character(1))
names(vals)[missing_names] <- names[missing_names]
}
vals
}
a <- 1
b <- 2
c <- 3
c2(a, b, d = c)
# a b d
# 1 2 3
Обратите внимание, что не гарантируется получение синтаксически допустимых имен. Если вы хотите, примените функцию make.names
к вектору names
.
c2(mean(a,b,c))
# mean(a, b, c)
# 1
Также, как и для любой функции, которая использует замену, c2
больше подходит для интерактивного использования, чем для использования в другой функции.