【发布时间】:2012-08-30 00:45:33
【问题描述】:
我在 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
【问题讨论】:
-
我不认为我跟随。
?mapply的文档指出,参数是通过回收来扩展的。你能构建一个具体的例子来说明你的问题吗?