【问题标题】:R create list of matricesR创建矩阵列表
【发布时间】:2020-11-24 05:18:14
【问题描述】:

这篇文章和我之前的post类似。

假设我是否有以下代码:

my_list <- list(c(1,2),3,4)

x = list()
for(i in 1:4) {
  x[[i]] <- matrix(1:9*i, nrow = 3)
}

my_list 在哪里:

[[1]]
[1] 1 2

[[2]]
[1] 3

[[3]]
[1] 4

我应该写什么才能得到与下面相同的结果?

[[1]]
[[1]][[1]]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

[[1]][[2]]
     [,1] [,2] [,3]
[1,]    2    8   14
[2,]    4   10   16
[3,]    6   12   18


[[2]]
     [,1] [,2] [,3]
[1,]    3   12   21
[2,]    6   15   24
[3,]    9   18   27

[[3]]
     [,1] [,2] [,3]
[1,]    4   16   28
[2,]    8   20   32
[3,]   12   24   36

我已经尝试使用下面的代码,但它不适用于这种情况:

mat <- ls(pattern = "x[[\\d+$]]", envir = .GlobalEnv)
mat_list <- lapply(my_list, function(i) mget(mat[i], envir = .GlobalEnv))

mat_list <- lapply(my_list, function(i) x[[i]])

【问题讨论】:

  • 你需要lapply(my_list, function(i) x[i]) 吗?
  • 啊,我可能把它复杂化了,这行得通!谢谢@Ronak

标签: r list matrix lapply


【解决方案1】:

您可以使用relist 使x 的结构类似于my_list

relist(x, my_list)

#[[1]]
#[[1]][[1]]
#     [,1] [,2] [,3]
#[1,]    1    4    7
#[2,]    2    5    8
#[3,]    3    6    9

#[[1]][[2]]
#     [,1] [,2] [,3]
#[1,]    2    8   14
#[2,]    4   10   16
#[3,]    6   12   18


#[[2]]
#[[2]][[1]]
#     [,1] [,2] [,3]
#[1,]    3   12   21
#[2,]    6   15   24
#[3,]    9   18   27


#[[3]]
#[[3]][[1]]
#     [,1] [,2] [,3]
#[1,]    4   16   28
#[2,]    8   20   32
#[3,]   12   24   36

使用lapply 获得类似的输出:

lapply(my_list, function(i) x[i])

如果您想避免单个矩阵的嵌套输出并希望它完全如图所示,您可以使用:

lapply(my_list, function(i) if(length(i) > 1) x[i] else x[[i]])

#[[1]]
#[[1]][[1]]
#     [,1] [,2] [,3]
#[1,]    1    4    7
#[2,]    2    5    8
#[3,]    3    6    9

#[[1]][[2]]
#     [,1] [,2] [,3]
#[1,]    2    8   14
#[2,]    4   10   16
#[3,]    6   12   18


#[[2]]
#     [,1] [,2] [,3]
#[1,]    3   12   21
#[2,]    6   15   24
#[3,]    9   18   27

#[[3]]
#     [,1] [,2] [,3]
#[1,]    4   16   28
#[2,]    8   20   32
#[3,]   12   24   36

您可以在这里阅读[[[ 之间的区别:The difference between bracket [ ] and double bracket [[ ]] for accessing the elements of a list or dataframe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多