r - 将 `dimnames` 分配给列表中的所有矩阵时出错

标签 r list matrix lapply

我在这个线程中使用了解决方案 assign dimnames to a list of matrices in R但我没有得到我需要的东西。

我有一个包含 4 个矩阵的列表,我想将它们的列和行命名为相同的名称。

A = list(a = matrix(1:4, 2), b = matrix(2:5, 2))

G = list(a = matrix(10:13, 2), b = matrix(5:8, 2))

M_1 = list(a = matrix(10:13, 2), b = matrix(5:8, 2))

M_2 = list(a = matrix(2:5, 2), b = matrix(5:8, 2))

dlist4 <- tibble::lst(A, G, M_1, M_2)
Map(function(x) {dimnames(x) <- list(c("seed","plant"), c("seed","plant")); x}, dlist4)

lapply(dlist4, function(x) {dimnames(x) = list(c("seed","plant"), c("seed","plant")); x})

返回相同的错误:Error in dimnames(x) <- list(c("seed", "plant"), c("seed", "plant")) : 'dimnames' applied to non-array

我尝试了 loop在这里R: change column names of every matrix in a list ,也一样,但没有成功。

for(i in seq_along(dlist4)) {
        dimnames(dlist4[[i]]) <- list(c("seed","plant"), c("seed","plant"))
 }

Error in dimnames(dlist4[[i]]) <- list(c("seed", "plant"), c("seed", "plant")) : 'dimnames' applied to non-array

最佳答案

您的主列表中没有矩阵,您有另一组列表 - 请参阅lapply(dlist4, class)。所以它不是 4 个矩阵,而是 4 组两个矩阵,每个矩阵都在一个列表中。

在这种情况下,您需要递归地向下直到停止点击列表,这意味着rapply可能很方便:

rapply(dlist4, function(x) {dimnames(x) <- rep(list(c("seed","plant")), 2); x}, how="list")
#$A
#$A$a
#      seed plant
#seed     1     3
#plant    2     4
#
#$A$b
#      seed plant
#seed     2     4
#plant    3     5
#
#
#$G
#$G$a
#      seed plant
#seed    10    12
#plant   11    13
#...

关于r - 将 `dimnames` 分配给列表中的所有矩阵时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71612217/

相关文章:

c# - 跟踪对象的关系列表的最佳方法是什么

list - Haskell - 数字和列表

matlab - 如何有条件地获取矩阵行?

javascript - 在滚动上实现流体倾斜变换

r - 根据子组填写季度时间序列中缺失的日期和时间

r - 在 R 中执行 Postgres 函数

r - R 中条件的累积和

html - R Shiny : Change uiOutput wrapper

Python根据键值对更新字典

file - 强制 dlmread 返回 uint8 矩阵 - 可能吗?