0

Rには、たとえば3つのパラメーターを受け取る関数がありますfoo(x,y,z)

関数を呼び出すと、実際には、の要素のリストと、の要素のxリストyが1つだけありzます。リストの場合、各要素Zに適用したかったのですが、動作します。foomapply(foo, x, y, z)

ただし、zはリストではないため、mapply(foo,x,y,z)機能しません。

より具体的には、xとyがそれぞれ3つの要素のリストである場合、以下は機能しますmapply(foo, x, y, list(z, z, z))

最初に3つの要素のリストを作成mapplysapplyずに、組み合わせることができる方法はありますか?ただ再利用しzたい!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 に答える