当前位置: 首页 > 知识库问答 >
问题:

在 R 中循环创建矩阵和行/列名称

贺方伟
2023-03-14

我想要一个 7*17 矩阵。
行名来自 2:8(第一行名称为 2,第二行名称为 3 和 ...列
名是 4:17(第一列有名称 4,第二列有名称 5 和 ...)
矩阵元素被填充使得 mat[i,j] = 第 i 行的行名 * 第 j 列的列名。

我在尝试时出错:

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='.')
      }
}

这是错误:

dimnames错误(x)

我该如何解决这个问题?

共有1个答案

南门飞
2023-03-14

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

  1. 它正在尝试将名称插入到名称向量中,但尚未在矩阵上设置名称
  2. 冷名称(mat)[cc]

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='.')
  }
}

 类似资料:
  • 我试图研究我的数据中有零值的概率,我开发了一个代码,当一列数据为零时输出另一列数据的值,这正是我所需要的。但是,对于577BY29数据流中的每一列和其他28列都要这样做是很困难的,所以我决定创建一个for循环,在我有以下内容的地方为我这样做: 您可以看到,当输出数据帧有n=29列时,代码循环正确,但对于上面指定的条件,代码循环不正确。 请帮忙,谢谢!

  • 我有一个data.frame包含三个二进制变量的调查数据。数据已经在列联表中,前3列是答案(1=是,0=否),第四列显示答案的总数。行是三个不同的组。 我的目的是计算Z分数,以检查比例与总的相比是否有显著差异 这是我的数据: 这些是我的总价值 所以这里当前使用的参数dftotal$var1和dftotal$totaln不起作用,但我不知道如何将它们输入公式。对于第一个参数,它不能总是var1,而应

  • 我认为无论如何我都必须在内循环上使用foreach,对吗?

  • 本文向大家介绍Python中矩阵创建和矩阵运算方法,包括了Python中矩阵创建和矩阵运算方法的使用技巧和注意事项,需要的朋友参考一下 矩阵创建 1、from numpyimport *; a1=array([1,2,3]) a2=mat(a1) 矩阵与方块列表的区别如下: 2、data2=mat(ones((2,4))) 创建一个2*4的1矩阵,默认是浮点型的数据,如果需要时int类型,可以使用

  • 我有两个列表,每个列表中有两个矩阵。。是否有一种方法可以对它们进行矩阵计算,即相加,其中matrix1中的蓝色矩阵与matrix2中的蓝色矩阵相加,matrix1中的红色矩阵与matrix2中的红色矩阵相加。我能想到的唯一方法是在循环中进行计算 请注意,我将有大约10个,以及不止一组(即蓝色、红色、绿色、紫色)

  • 中的值匹配功能非常有用。但据我理解,它不足以支持二维或高维输入。 例如,假设和是相同列数的矩阵,我想将的行与的行进行匹配。“R”函数调用不这样做。列表的输入也存在同样的不足。 我已经实现了我自己的版本,名为(附在下面),但我想知道您对此任务的解决方案是什么。

  • 问题内容: 我已将dsl作业配置为删除未引用的作业,并且我想保留以下内容: 我试图做到这一点: Jenkins创建job1,但是在创建job2时将其删除。如何遍历列表以创建多个作业? 也许我可以构建multibranchPipelineJob objs和listView.jobs的映射/闭合,然后以某种方式将其传递给dsl? 问题答案: 我愚蠢的工作本身实际上已经创建好,只是列表视图代替了他们。之

  • 本文向大家介绍如何在R中创建具有随机值的矩阵?,包括了如何在R中创建具有随机值的矩阵?的使用技巧和注意事项,需要的朋友参考一下 通常,使用给定值创建矩阵,但是如果我们要创建具有随机值的矩阵,则将对矩阵函数使用常规方法。R中的随机选择可以根据我们的目标以多种方式完成,例如,如果要从正态分布中随机选择值,则将使用rnorm函数并将其存储在矩阵中,然后将其传递到矩阵函数中。 示例 输出结果 示例 输出结