Передавая несколько аргументов FUN of lapply (и другие * применяются)
У меня есть вопрос, касающийся передачи нескольких аргументов функции при использовании lapply
в R
Когда я использую lapply с синтаксисом lapply(input, myfun);
- это легко понять, и я могу определить myfun так:
myfun <- function(x) {
# doing something here with x
}
lapply(input, myfun);
и элементы input
передаются как аргумент x
в myfun
.
Но что, если мне нужно передать еще несколько аргументов в myfunc
? Например, это определяется так:
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
Как я могу использовать эту функцию с передачей как input
элементов (в качестве аргумента x
), так и некоторых других аргументов?
Ответы
Ответ 1
Если вы просматриваете страницу справки, одним из аргументов lapply
является таинственный ...
. Когда мы рассмотрим раздел "Аргументы" на странице справки, мы найдем следующую строку:
...: optional arguments to ‘FUN’.
Итак, все, что вам нужно сделать, это включить другой аргумент в вызов lapply
в качестве аргумента, например:
lapply(input, myfun, arg1=6)
и lapply
, признавая, что arg1
не является аргументом, который он знает, что делать, автоматически передает его на myfun
. Все остальные функции apply
могут делать то же самое.
Добавление: вы можете использовать ...
, когда пишете свои собственные функции. Например, скажем, вы пишете функцию, вызывающую plot
в какой-то момент, и вы хотите иметь возможность изменять параметры графика из вашего вызова функции. Вы можете включить каждый параметр в качестве аргумента в свою функцию, но это раздражает. Вместо этого вы можете использовать ...
(в качестве аргумента как для вашей функции, так и для вызова сюжета внутри нее), и любой аргумент, который ваша функция не распознает, автоматически передается на plot
.
Ответ 2
Как было предложено Аланом, функция mapply применяется к нескольким множественным спискам или векторным аргументам:
mapply(myfun, arg1, arg2)
См. справочную страницу:
https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html
Ответ 3
Вы можете сделать это следующим образом:
myfxn <- function(var1,var2,var3){
var1*var2*var3
}
lapply(1:3,myfxn,var2=2,var3=100)
и вы получите ответ:
[[1]]
[1] 200
[[2]]
[1] 400
[[3]]
[1] 600