【问题标题】:How to use unlist with nested lapply in R [duplicate]如何在R中使用带有嵌套lapply的unlist [重复]
【发布时间】:2018-04-19 08:29:00
【问题描述】:

我正在处理一个困难的函数。举一个我的函数的例子非常困难,因此,我试图给出一个非常接近我的问题的例子。我想将输出作为列表而不是列表列表。

输入

 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,但它给了我一个向量。

【问题讨论】:

    标签: r


    【解决方案1】:

    使用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 
    

    【讨论】:

      【解决方案2】:

      您可以执行以下操作:

      library(purrr)
      flatten(xy)
      

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

      【讨论】:

      • @RonakShah 我不知道。 OP必须澄清。
      • @RonakShah 我的错。感谢@Sotos 对帖子进行了编辑,实际上我指的是purrr 包。但是,由于该帖子是关于使用 unlist 函数的,因此另一个答案是占主导地位的。
      猜你喜欢
      • 2020-07-01
      • 2019-11-27
      • 2020-06-05
      • 1970-01-01
      • 2012-09-02
      • 2021-02-05
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多