【问题标题】:How to apply a function between the elements of 2 lists in R?如何在 R 中 2 个列表的元素之间应用函数?
【发布时间】:2020-02-27 10:58:39
【问题描述】:

想象一下你有这些变量:

> a <- list(matrix(1:25, 5, 5, byrow = TRUE), matrix(31:55, 5, 5, byrow = TRUE))
> b <- list(rep(1, 5), rep(2, 5))
> a
[[1]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
[4,]   16   17   18   19   20
[5,]   21   22   23   24   25

[[2]]
     [,1] [,2] [,3] [,4] [,5]
[1,]   31   32   33   34   35
[2,]   36   37   38   39   40
[3,]   41   42   43   44   45
[4,]   46   47   48   49   50
[5,]   51   52   53   54   55

> b
[[1]]
[1] 1 1 1 1 1

[[2]]
[1] 2 2 2 2 2

我想得到这样的结果:

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    1    2    3    4    5
[3,]    6    7    8    9   10
[4,]   11   12   13   14   15
[5,]   16   17   18   19   20
[6,]   21   22   23   24   25

     [,1] [,2] [,3] [,4] [,5]
[1,]    2    2    2    2    2
[2,]   31   32   33   34   35
[3,]   36   37   38   39   40
[4,]   41   42   43   44   45
[5,]   46   47   48   49   50
[6,]   51   52   53   54   55

所以,这就像有一个 Python zip-like 函数然后应用 rbind。 有什么想法吗?

【问题讨论】:

    标签: r list functional-programming


    【解决方案1】:

    一个选项是Map 来自base R

    Map(rbind, b, a)
    

    【讨论】:

    • 我必须接受这个,因为它的紧凑形式的答案。
    【解决方案2】:

    或者你可以试试:

    lapply(1:length(a),function(i)rbind(b[[i]],a[[i]]))
    

    假设长度(a) == 长度(b)

    【讨论】:

    • 您可能希望更改rbind() 中参数的顺序,以得到作为示例给出的输出。 (rbind(b[[i]],a[[i]]) 顶部有 b 的元素)
    • 我喜欢在lapply(1:length(a).... 中迭代length(a) 的技巧。不错!
    • 谢谢。可悲的是,有时在 python 中,我最终使用它而不是 zip lol
    【解决方案3】:

    一种选择是使用purrr 包。

    library(purrr)
    
    map2(b, a, rbind)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      相关资源
      最近更新 更多