Используя следующую функцию foo()
в качестве простого примера, я хотел бы распределить значения, указанные в ...
, по возможности двумя различными функциями.
foo <- function(x, y, ...) {
list(sum = sum(x, ...), grep = grep("abc", y, ...))
}
В следующем примере я хотел бы передать na.rm
в sum()
, а value
- на grep()
. Но я получаю сообщение об ошибке для неиспользуемого аргумента в grep()
.
X <- c(1:5, NA, 6:10)
Y <- "xyzabcxyz"
foo(X, Y, na.rm = TRUE, value = TRUE)
# Error in grep("abc", y, ...) : unused argument (na.rm = TRUE)
Похоже, что аргументы были сначала отправлены на grep()
. Это верно? Я бы подумал, что R сначала увидит и оценит sum()
и вернет ошибку для этого случая.
Кроме того, при попытке разделить аргументы в ...
, я столкнулся с проблемой. sum()
формальные аргументы NULL
, потому что это .Primitive
, поэтому я не могу использовать
names(formals(sum)) %in% names(list(...))
Я также не хочу предполагать, что оставшиеся аргументы из
names(formals(grep)) %in% names(list(...))
автоматически передаются в sum()
.
Как я могу безопасно и эффективно распределять аргументы ...
для нескольких функций, чтобы не делалось ненужных оценок?
В долгосрочной перспективе я хотел бы применить это к функциям с длинным списком аргументов ...
, аналогичным аргументам download.file()
и scan()
.