Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 如何将列表传递给R中的函数?_Function_R - Fatal编程技术网

Function 如何将列表传递给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

我一直很难找到关于如何将列表传递给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, 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))