我一直难以找到有关如何在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')
也没有提供关于如何将列表传递给函数的信息。
更新
澄清一下,我知道如何将列表用作单个参数,但是我感到困惑的原因是我曾经认为函数的一个特性是可以将多个参数作为列表传递。看来这种印象是错误的。相反,许多函数是专门编写处理列表的,如下面的评论和答案所述。
plot
有一个处理列表的方法。如果要使用foo
进行类似的操作,你需要将其泛化并编写相应的方法。 - Joshua Ulrichplot(list(x=1,y=1))
调用plot.default
,该函数使用xy.coords
。xy.coords
的源代码有一个 if/else 分支来处理多种类型的x
参数(ts
、matrix
、data.frame
、formula
、complex
、list
)。因此它不是一个通用的函数。类似的解决方案是定义foo(a, b=NULL)
并在b
为 null 时有一个 if/else 分支来处理a
的多个类。 - Joshua Ulrich