首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环中,在R中创建一个矩阵和行/col名称

在循环中,在R中创建一个矩阵和行/col名称
EN

Stack Overflow用户
提问于 2021-08-31 16:28:08
回答 1查看 410关注 0票数 2

我要一个7*17矩阵。

行名从2:8开始(第一行名为2,第二行名称为3,.)

冒号为4:17 (第一列有名称4,第二栏有名称5和.)

矩阵元素被填充,使得mati,j= ith行的行名*colname of jth col。

我试图做的事情出错了:

代码语言:javascript
复制
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的长度不等于数组

我该怎么解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-31 16:34:26

这个问题中的代码有几个问题:

它试图将名称插入到名称向量中,但是没有在matrix.

  • colnames(mat)[cc]<-...上设置名称,应该是colnames(mat)[cc-3]<-

  • Using,byrow=TRUE不是一个错误,但是它没有意义,因为每个元素都是0,所以插入0顺序并不重要。

1)建议这样做:

代码语言:javascript
复制
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从行创建一个矩阵。

代码语言:javascript
复制
library(listcompr)
gen.named.matrix("class.{r}", gen.named.vector("count.{c}", c*r, c = cc), r = rr)

3)如果您想要修复问题中的代码,那么就这样做:

代码语言:javascript
复制
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='.')
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69002278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档