Подтвердить что ты не робот

Передавая несколько аргументов 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), так и некоторых других аргументов?

4b9b3361

Ответ 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