0

次の (単純な) リストのリストを考えてみましょう。

big_lst = list(list(rnorm(3), rnorm(4)), list(rnorm(3), rnorm(4)))

#> big_lst
#[[1]]
#[[1]][[1]]
#[1]  0.63620243 -0.01875264 -2.77235708

#[[1]][[2]]
#[1]  1.0527421 -0.3302443  1.2028328 -0.4019282


#[[2]]
#[[2]][[1]]
#[1] -1.6071500 -0.2870488 -0.1432817

#[[2]][[2]]
#[1]  0.7149935 -0.3090975  1.0108511  1.0419313

このリストから、次のように 2 つのサブリストを作成したいと思います。

  • 最初のリストは、 の各サブリストのすべての最初の要素のリストになりbig_lstます。つまり、最初のリストには[1][[1]][2][[1]]が含まれている必要があります。
  • 2 番目のリストは、 の各サブリストのすべての 2 番目の要素のリストになりbig_lstます。つまり、2 番目のリストには[1][[2]][2][[2]]が含まれている必要があります。

それを行う簡単な方法はありますか?これはメソッドに関係していると感じていますが、split機能させることができませんでした。

ありがとう、

4

2 に答える 2

2

次のようなことができます。

split(do.call(c, big_lst), 1:2)

ベンチマーク:

big_lst <- rep(big_lst, 100)
josh <- function() do.call(mapply, c(list, big_lst, SIMPLIFY=FALSE))
matthew <- function() split(do.call(c, big_lst), 1:2)
microbenchmark(josh(), matthew())
# Unit: microseconds
#       expr   min    lq median    uq    max neval
#     josh() 351.5 362.4  375.5 397.0 3191.9   100
#  matthew() 142.6 147.6  151.8 159.1  239.3   100
于 2013-11-13T17:14:42.090 に答える