Возможно, об этом уже спрашивали, но я не нашел подходящих вопросов / ответов (пока?).
Исходя из Python (*args и **kwargs), я пытаюсь понять конструкцию ... как параметр функции в R.
Предположим, у нас есть
test <- function(x, ...) {
print(...)
}
test(x=c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12))
Почему это только уступает
[1] 4 5 6
И как перебрать несколько аргументов (если есть)?
@Roland: Спасибо за объяснение.





test <- function(x, ...) {
# these are equivalent and print prints only its first argument, see ?print
print(c(4,5,6), c(7,8,9), c(10,11,12))
print(...)
# here's how you can get the dots
a <- eval(substitute(alist(...))) # unevaluated dots
# or
a <- list(...) # evaluated dots (works fine as well in this case)
a
}
test(x=c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12))
# [1] 4 5 6
# [1] 4 5 6
# [[1]]
# c(4, 5, 6)
#
# [[2]]
# c(7, 8, 9)
#
# [[3]]
# c(10, 11, 12)
Почему я должен использовать eval(substitute(list(...))) вместо list(...)? Есть ли преимущество перед последним?
на самом деле для этого случая это ничего не меняет, но то, что я предложил, оставить точки без оценки, попробуйте поместить это в тело функции: print(str(eval(substitute(alist(...))))); print(str(list(...)))
Итак, если вы попробуете test(x, a,b,c) без определения параметров, вы увидите, что list(...) не сработает, а eval(substitute(alist(...)) - нет.
Изучите
help("print"). Его первый аргумент - это значение, которое нужно напечатать. Вы в основном делаете этоprint.default(x = c(4.12345678,5,6), digits= c(7,8,9), quote = c(10,11,12)), аprint.defaultмолча использует первое значение векторов (например,digits= 7) для других аргументов.