如何将列表传递给R中的函数?

时间:2011-06-27 17:47:44

标签: function r

我一直难以找到有关如何将列表传递给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 个答案:

答案 0 :(得分:28)

使用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))

答案 1 :(得分:5)

你的函数有两个参数,但你只传递一个,因此错误。

您可以像这样修改代码:

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