В R, как вы можете вставить список в функцию, которая принимает два аргумента? - PullRequest
2 голосов
/ 08 марта 2012

У меня есть функция f, которая принимает два аргумента, a и b. У меня есть список значений x, которые я хотел бы добавить для a, в то время как b исправлено. В Ruby я бы использовал map, как в:

 x.map {|el| f(el,3) } 

Как вы пишете это в R?

Ответы [ 3 ]

5 голосов
/ 08 марта 2012

отредактировано : фиксированный порядок аргументов

Что-то вроде lapply(x,f,b=3) (или sapply())

4 голосов
/ 08 марта 2012

В зависимости от вашей функции, вы можете иногда использовать ее напрямую, с вектором в качестве первого аргумента

f <- function(a,b) a+b
f(1:10,2)

или, если это не работает (если функция предполагает, что первый аргумент - это одно число, а не вектор), Вы можете векторизовать это (Vectorize просто скрывает вызов lapply).

f <- Vectorize(f)
f(1:10,2)
3 голосов
/ 08 марта 2012

В этом случае sapply работает нормально (как ответил @BenBolker), но mapply также является хорошей альтернативой и фактически «лучшим» решением, когда a и b различаются:

f <- function(a,b) a+b
x <- as.list(11:13) # you said you had a list...

# One argument (b) is fixed
sapply(x, f, 3) # 14 15 16
mapply(f, x, 3) # 14 15 16

# Both arguments vary
y <- 101:103
mapply(f, x, y) # 112 114 116
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...