我在这个线程中使用了解决方案 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/