【问题标题】:Add column name to the column of a matrix将列名添加到矩阵的列
【发布时间】:2015-08-05 14:50:27
【问题描述】:

我正在尝试将列名添加到 10 列 x 100 行矩阵 test_matrix 的列中,该矩阵的每一列都填充了从 runif() 生成的 100 个随机数

test_matrix <- matrix(ncol = 10, nrow = 100)

for (i in 1:ncol(test_matrix)){
    test_matrix[, i] <- runif(100)
    colnames(test_matrix)[i] <- paste0("Column ", i)
}

我得到这个错误:

Error in `colnames<-`(`*tmp*`, value = "Column 1") : 
length of 'dimnames' [2] not equal to array extent

为什么这不起作用?

【问题讨论】:

  • 什么是my_matrix?你定义了test_matrix
  • 抱歉(错字) - 已编辑问题。
  • 我认为你不需要循环。

标签: r


【解决方案1】:
test_matrix <- matrix(ncol = 10, nrow = 100)

colnames(test_matrix) <- paste0("Column", seq(ncol(test_matrix)))

> head(test_matrix)
       Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8 Column9 Column10
  [1,]      NA      NA      NA      NA      NA      NA      NA      NA      NA       NA
  [2,]      NA      NA      NA      NA      NA      NA      NA      NA      NA       NA
  [3,]      NA      NA      NA      NA      NA      NA      NA      NA      NA       NA
  [4,]      NA      NA      NA      NA      NA      NA      NA      NA      NA       NA
  [5,]      NA      NA      NA      NA      NA      NA      NA      NA      NA       NA
  [6,]      NA      NA      NA      NA      NA      NA      NA      NA      NA       NA

【讨论】:

  • 效果很好,谢谢。为什么按索引列命名不起作用?
  • @JoshuaRosenberg 因为colnames 在你开始循环时没有定义(等于NULL),所以你尝试访问一个不存在的对象的元素。如果您首先定义例如colnames(test_matrix) &lt;- rep("foo", 10),您的循环有效。 (但当然mkemp6的解决方案更好。)
猜你喜欢
  • 2015-06-21
  • 1970-01-01
  • 2020-09-11
  • 2017-06-15
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
相关资源
最近更新 更多