如何在R中使用嵌套lapply的unlist

时间:2018-04-19 08:29:00

标签: r

我正在努力完成一项艰难的工作。举一个我的功能的例子很难,因此,我试图给出一个非常接近我的问题的例子。我想将输出作为列表而不是列表列表。

输入

 x <- list(rnorm(10,2,3), rnorm(10,3,4))
y <- list(rnorm(10,4,5), rnorm(10,5,6))
z <- list(x, y)
xy <- lapply(seq_along(z), function(i) {
  lapply(seq_along( z[[i]]), function(j) {
    x[[i]][[j]]*z[[i]][[j]]
  })
})
unlist(xy)

输出

      xy
[[1]]
[[1]][[1]]
 [1]  2.2280230 -4.9779716  4.1359718 10.3939970 -5.2133243 -1.2696787  0.5000506  4.7157700  7.8720780  7.0678141

[[1]][[2]]
 [1] -14.950644  -7.263222  -6.586231   9.762505  -4.686088   4.259647  -3.579593  -7.341470 -13.626069   4.979983


[[2]]
[[2]][[1]]
 [1]  3.2567110 18.8390907 32.7599898 16.5438238 10.7631826 35.8007750  7.0666637 -9.0148408 -2.5030033 -0.6119803

[[2]][[2]]
 [1] 26.766508  9.292216  8.767470 20.690148 20.456934 22.686122  1.981408  1.763479  9.060410 35.391961

预期输出

XY

[[1]]
 [1]  2.2280230 -4.9779716  4.1359718 10.3939970 -5.2133243 -1.2696787  0.5000506  4.7157700  7.8720780  7.0678141

[[2]]
 [1] -14.950644  -7.263222  -6.586231   9.762505  -4.686088   4.259647  -3.579593  -7.341470 -13.626069   4.979983


[[3]]
 [1]  3.2567110 18.8390907 32.7599898 16.5438238 10.7631826 35.8007750  7.0666637 -9.0148408 -2.5030033 -0.6119803

[[4]]
     [1] 26.766508  9.292216  8.767470 20.690148 20.456934 22.686122  1.981408  1.763479  9.060410 35.391961

我试过unlist,但它给了我一个矢量。

2 个答案:

答案 0 :(得分:4)

使用unlist(xy, recursive = FALSE)

它将阻止将未列出的内容应用于列表的组件。

输出结果为:

[[1]]
 [1]  0.27862974  1.47723685 -1.82963782  3.47664717  0.62645954  1.67429065 -0.06359767 -1.21542539  1.65609366  2.65336458

[[2]]
 [1]   1.167232   3.318266   5.949589 -18.459982  -5.321955   7.810067 -12.792953   2.723463   9.934529  16.385867

[[3]]
 [1]  5.4596367  1.3340797  4.8059125 -0.2578762  1.2808736  2.6462153 -3.6259595  1.4900160 -0.1496829 -0.8140339

[[4]]
 [1] 13.130614  2.957532  2.270956  1.015446 -3.254110 -4.939529  1.465290 -3.141455  5.803487 15.114528 

答案 1 :(得分:1)

您可以执行以下操作:

library(purrr)
flatten(xy)

我认为这是你想要的,但如果不是,请告诉我。