3

次のような 2 つのリストがあります。

mylist <- list(a=c(1:5), 
               b = c(5:12), 
               c = c(2:8))

list.id <- list(a=2, b=8, c=5)

mylistの対応する要素よりも大きいの要素の数を数え、その結果をmylist の要素の でlist.id除算したいと考えています。length私はこの関数を書きました。

perm.fun <- perm.fun2 = function(x,y){length(which(x[[i]] < y[[i]]))/length(x[[i]])}

しかし、そうすると:lapply(mylist, perm.fun, list.id)期待した結果が得られません。

ありがとう

4

1 に答える 1

4

を使用すると、インデックス ( 、、 )lapplyをループして、との両方から要素を抽出するために使用できるようにする必要があります。123mylistlist.id

perm.fun <- function(i, x, y) mean(x[[i]] > y[[i]])
lapply(seq_along(mylist), perm.fun, mylist, list.id)

しかしmapply、そのタスクにははるかに優れたツールです。ドキュメントから:

mapply は、各 ... 引数の最初の要素、2 番目の要素、3 番目の要素などに FUN を適用します。

したがって、コードは次のようになります。

mapply(function(x, y) mean(x > y), mylist, list.id)
#         a         b         c 
# 0.6000000 0.5000000 0.4285714 
于 2013-05-22T00:11:36.450 に答える