R применить функцию с несколькими параметрами - PullRequest
108 голосов
/ 26 июля 2011

У меня есть функция f(var1, var2) в R. Предположим, мы установили var2 = 1, и теперь я хочу применить функцию f() к списку L.По сути, я хочу получить новый список L * с выводами

[f(L[1],1),f(L[2],1),...,f(L[n],1)]

Как мне это сделать с apply, mapply или lapply?

Ответы [ 3 ]

160 голосов
/ 26 июля 2011

Просто передайте var2 в качестве дополнительного аргумента одной из применяемых функций.

mylist <- list(a=1,b=2,c=3)
myfxn <- function(var1,var2){
  var1*var2
}
var2 <- 2

sapply(mylist,myfxn,var2=var2)

Это передает одинаковое var2 на каждый вызов myfxn.Если вместо этого вы хотите, чтобы каждый вызов myfxn получал 1/2/3 / и т. Д.элемент mylist и var2, то вы находитесь в домене mapply.

32 голосов
/ 01 ноября 2016

Если ваша функция имеет две векторные переменные и должна вычислять себя для каждого их значения (как упомянул @Ari B. Friedman), вы можете использовать mapply следующим образом:

vars1<-c(1,2,3)
vars2<-c(10,20,30)
mult_one<-function(var1,var2)
{
   var1*var2
}
mapply(mult_one,vars1,vars2)

, что дает:

> mapply(mult_one,vars1,vars2)
[1] 10 40 90
0 голосов
/ 08 июля 2019

Для дальнейшего обобщения примера Александра, outer имеет значение в тех случаях, когда функция должна вычислять себя для каждой пары векторных значений:

vars1<-c(1,2,3)
vars2<-c(10,20,30)
mult_one<-function(var1,var2)
{
   var1*var2
}
outer(vars1,vars2,mult_one)

дает:

> outer(vars1, vars2, mult_one)
     [,1] [,2] [,3]
[1,]   10   20   30
[2,]   20   40   60
[3,]   30   60   90
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...