Function 如何将列表传递给R中的函数?
我一直很难找到关于如何将列表传递给R中的函数的信息 我以前使用过这种方法,例如Function 如何将列表传递给R中的函数?,function,r,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 foo使用do.call foo <- function(a
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
foo使用do.call
foo <- function(a, b) a + b
do.call(foo, list(a=1,b=1))
foo您的函数有两个参数,但您只传递了一个参数,因此出现了错误
您可以这样修改代码:
foo <- function(a) c <- a[[1]] + a[[2]]
foo(list(a=1,b=1))
foo您正在向函数传递一个参数,该参数预期为2。正确的调用应该是:foo(a=list(1),b=list(2))。如果您想向函数传递一个列表,那么您必须将其声明为函数(a),然后以相同的方式调用它。您的函数逻辑也处于关闭状态,因为您无法以这种方式添加非数值参数,您必须在函数体中为列表编制索引,以实现您想要的结果(此处猜测),即a[[1]]+b[[1]]。我没有研究过它,但我想plot
有一个处理列表的方法。若要对foo
执行类似的操作,您需要使其具有通用性并编写适当的方法。@Joshua,感谢您的澄清。我的印象是列表可以不经过特殊处理而传递。plot(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
。
foo <- function(a) c <- a[[1]] + a[[2]]
foo(list(a=1,b=1))