【发布时间】:2019-08-05 18:24:26
【问题描述】:
假设我们有一组不同维度的矩阵,但具有共同的行名和列名。我们想找到矩阵的元素方式。 xtabs() 是一个方便的函数。
但是,在for() 内部,as.table() 无法识别调用每个矩阵的表达式。首先创建一个矩阵列表,然后调用该列表的每个元素同样失败。
MWE:创建矩阵:
m1 <- matrix(1:9,nrow=3,ncol=3)
colnames(m1) <- c("A","B","C")
rownames(m1) <- c("A","B","C")
m2 <- matrix(10:18,nrow=3,ncol=3)
colnames(m2) <- c("A","B","C")
rownames(m2) <- c("A","B","C")
m3 <- matrix(19:22,nrow=2,ncol=2)
colnames(m3) <- c("A","B")
rownames(m3) <- c("A","B")
使用其中一个矩阵作为构建的基础:
A <- m1
加入并找到方法:
for(i in 2:3){
mat <- noquote(paste0("m", i))
B <- rbind(as.data.frame(as.table(A)), as.data.frame(as.table(mat)))
A <- xtabs(Freq ~ Var1 + Var2, aggregate(Freq ~ Var1 + Var2, B, mean))
}
问题出在as.table(mat),导致报错:
Error in as.table.default(mat) : cannot coerce to a table
这只是一个工作示例,实际应用程序会在数千个具有不同命名约定的矩阵上重复此操作。将noquote(paste0("m", i)) 直接插入as.table() 也会失败。
直接用矩阵对象替换mat 就可以正常工作(即as.table(m2))。谢谢!
【问题讨论】: