0

我在 R 中有一个函数,它接受 3 个参数,比如foo(x,y,z).

当我调用该函数时,我确实有一个元素x列表 for 和一个列表,y但只有一个元素 for z。IfZ是一个列表,我想应用于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
4

2 回答 2

4

使用MoreArgs参数mapply

mapply(foo, x = mylist1, y= mylist2, MoreArgs = list(z = item3))
## [1] 23 29 34
于 2012-08-30T01:08:03.060 回答
2

您只需将最后一项放入列表中,R 就会很好地回收它:

mapply(foo, mylist1, mylist2, list(item3))

请注意,文档特别说明您传递的参数必须是:

向量化的参数(严格为正长度的向量或列表,或全部为零长度)

你试图传递一个矩阵。

于 2012-08-30T01:07:40.697 回答