【问题标题】:Assign matrix columns as elements of a list将矩阵列分配为列表的元素
【发布时间】:2017-11-27 15:19:15
【问题描述】:

我正在尝试对一些旧代码中的混乱循环进行矢量化处理。

假设我有一个列表 list1、一个矩阵 mat1 和一个索引向量 ind1,类似于:

list1 <- list(2:4, 1:3, 11:19, 36:42)
list1
## [[1]]
## [1] 2 3 4
## 
## [[2]]
## [1] 1 2 3
## 
## [[3]]
## [1] 11 12 13 14 15 16 17 18 19
## 
## [[4]]
## [1] 36 37 38 39 40 41 42

matrix1 <- matrix(1:16, nrow=4, ncol=4)
matrix1
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    9   13
## [2,]    2    6   10   14
## [3,]    3    7   11   15
## [4,]    4    8   12   16

indices1 <- 1:2

有没有一种干净的方法来提取索引indices1matrix1 列,即matrix1[,indices1],并将每个列向量分配给相应的列表元素list1,即list1[indices1]

...都具有所需的输出

list1
## [[1]]
## [1] 1 2 3 4
## 
## [[2]]
## [1] 5 6 7 8 
## 
## [[3]]
## [1] 11 12 13 14 15 16 17 18 19
## 
## [[4]]
## [1] 36 37 38 39 40 41 42

使用循环或应用类型的函数肯定可以做到这一点,但我希望有更高效的东西。感谢您的任何建议!

【问题讨论】:

    标签: r vector vectorization


    【解决方案1】:
    list1[indices1] <- data.frame(matrix1[,indices1])
    

    我不确定它是否足够有效。它似乎实现了你想做的事情。

    【讨论】:

    • 谢谢!我现在不在我的机器旁,但这看起来很简单而且很有希望。
    • 在我的代码中尝试了这个解决方案,它工作得很好 - 但是,它最终并没有在上下文中添加任何性能(一次只循环 3-4 次迭代)。经验教训:重复一个简单的过程几次可能比一个复杂的过程更有效。但再次感谢!
    猜你喜欢
    • 2017-05-29
    • 2021-11-13
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2019-01-21
    相关资源
    最近更新 更多