我要一个7*17矩阵。
行名从2:8开始(第一行名为2,第二行名称为3,.)
冒号为4:17 (第一列有名称4,第二栏有名称5和.)
矩阵元素被填充,使得mati,j= ith行的行名*colname of jth col。
我试图做的事情出错了:
mat <- matrix(0, nrow = 7, ncol = 17 , byrow = TRUE)
for (rr in 2:8) {
row.names(mat)[rr-1] <- paste('class', rr, sep='.')
for(cc in 4:20){
mat[rr-1,cc-3] <- rr*cc
colnames(mat)[cc] <- paste('count', cc, sep='.')
}
}这是一个错误:
名(X) <- dn中的
错误:“名”1的长度不等于数组
我该怎么解决这个问题。
发布于 2021-08-31 16:34:26
这个问题中的代码有几个问题:
它试图将名称插入到名称向量中,但是没有在matrix.
colnames(mat)[cc]<-...上设置名称,应该是colnames(mat)[cc-3]<-
byrow=TRUE不是一个错误,但是它没有意义,因为每个元素都是0,所以插入0顺序并不重要。1)建议这样做:
rr <- 2:8
cc <- 4:20
mat <- outer(rr, cc)
dimnames(mat) <- list(paste0("class.", rr), paste0("count.", cc))2)交替使用listcompr包通过列表理解来完成。对于rr中的每个r值,gen.named.vector调用创建一个已命名的向量,形成一行,然后gen.named.matrix从行创建一个矩阵。
library(listcompr)
gen.named.matrix("class.{r}", gen.named.vector("count.{c}", c*r, c = cc), r = rr)3)如果您想要修复问题中的代码,那么就这样做:
mat <- matrix(0, nrow = 7, ncol = 17 ,
dimnames = list(character(7), character(17)))
for (rr in 2:8) {
rownames(mat)[rr-1] <- paste('class', rr, sep='.')
for(cc in 4:20) {
mat[rr-1, cc-3] <- rr * cc
colnames(mat)[cc-3] <- paste('count', cc, sep='.')
}
}https://stackoverflow.com/questions/69002278
复制相似问题