我在R中有一个函数,它接受3个参数,比如foo(x,y,z)
。
当我调用该函数时,我确实有一个x
的元素列表,以及y
的列表,但z
只有一个元素。如果Z
是一个列表,并且我想将foo
应用于每个元素,则mapply(foo, x, y, z)
可以正常运行。
但是,由于z
不是列表,mapply(foo,x,y,z)
不起作用。
更具体地说,如果x
和y是每个3个元素的列表,则以下内容确实有效:mapply(foo, x, y, list(z, z, z))
。
有没有一种方法可以将mapply
和sapply
结合起来,而不是先将z
放入3个元素的列表中?我希望z
可以重复使用!
编辑1:我被问到一个例子:
mylist1 <- list(c(5,4), c(7,9), c(8,3))
mylist2<- list(c(2,3), c(6,7), c(10,11))
item3 <- matrix(data = 15, nrow = 3, ncol = 3)
foo <- function(x,y,z){
return(x[1]+y[2]+z[2,2])
}
以下作品:
> mapply(foo, mylist1, mylist2, list(item3,item3, item3))
[1] 23 29 34
以下不起作用:
mapply(foo, mylist1, mylist2, item3)
Error in z[2, 2] : incorrect number of dimensions
答案 0 :(得分:4)
使用MoreArgs
mapply
参数
mapply(foo, x = mylist1, y= mylist2, MoreArgs = list(z = item3))
## [1] 23 29 34
答案 1 :(得分:2)
你只需将最后一项放在一个清单中,R就可以很好地回收它:
mapply(foo, mylist1, mylist2, list(item3))
请注意,文档明确指出您传递的参数必须是:
向量化的参数(严格正长度的向量或列表,或全长零长度)
你试图传递一个矩阵。