1

x何百万ものエントリを含むリストがあります。そして、長さが 1 より大きいすべてのエントリを新しいリストに入れたいと考えていますz。Rでこれを効率的に行うにはどうすればよいですか?

このコードを試してみましたが、R は長時間実行され続けます。

z=NULL
for(i in 1:length(x)) {
  if(length(x[[i]])!=1) z=list(z,x[[i]])
}
4

2 に答える 2

6

これは、使用したい場合の 1 つですvapply

z <- x[vapply(x, length, integer(1)) > 1L]

sapplyと を比較するベンチマークは次のvapplyとおりです。

A <- list( x = c(), y = c(1), z = c(1, 2))
B <- A[sample(1:3, 1e7, replace = TRUE)]
system.time(sapply(B, length))
#    user  system elapsed 
#   55.95    0.54   56.50 
system.time(vapply(B, length, integer(1)))
#    user  system elapsed 
#    6.78    0.00    6.78 
于 2012-11-02T18:41:52.560 に答える
5

ただ行う:

z = x[sapply(x, length) > 1]
于 2012-11-02T18:34:36.647 に答える