Как передать список функции в R? - PullRequest
14 голосов
/ 27 июня 2011

У меня были трудности с поиском информации о том, как передать список функции в R.

Я уже использовал этот подход, например,

plot(list(x=1,y=1))

, но в следующем примеревыдает ошибку:

foo <- function(a, b) c <- a + b
foo(list(a=1,b=1))

Error in foo(list(a = 1, b = 1)) : 
   argument "b" is missing, with no default

Кроме того, ?function не работает и help('function') не предоставляет информацию о передаче списка функции.

обновление

Чтобы пояснить, я понимаю, как я могу использовать список в качестве одного аргумента, но я был сбит с толку, потому что у меня сложилось впечатление, что свойство функцийбыло то, что несколько аргументов могут быть переданы в виде списка.Похоже, это впечатление было неверным.Скорее, многие функции написаны специально для обработки списков, как описано в комментариях и ответах ниже.

Ответы [ 2 ]

28 голосов
/ 27 июня 2011

Используйте do.call

foo <- function(a, b)  a + b

do.call(foo, list(a=1,b=1))

В качестве альтернативы вы можете сделать

foo <- function(l) l$a + l$b

foo(list(a=1,b=1))
5 голосов
/ 27 июня 2011

Ваша функция имеет два аргумента, но вы передаете только один, следовательно, ошибка.

Вы можете изменить свой код следующим образом:

foo <- function(a) c <- a[[1]] + a[[2]]
foo(list(a=1,b=1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...