重命名嵌套在R中列表中的矩阵的列

时间:2015-03-04 16:44:12

标签: r matrix lapply

我有一个包含多个矩阵的列表。每个矩阵中的行都是唯一的,但列表示每个矩阵中常见的变量。

以下示例提供了我拥有的数据类型的示例:

  mat1 <- matrix(sample(1:100, 10, replace=TRUE), 2, 5)
  mat2 <- matrix(sample(1:100, 15, replace=TRUE), 3, 5)
  mat3 <- matrix(sample(1:100, 20, replace=TRUE), 4, 5)
  lst <- list(mat1, mat2, mat3)

更改列表中任何单个矩阵的colnames非常简单:

  colnames(lst[[1]]) <- LETTERS[1:5]

因此,似乎我应该能够写一个简单的lapply:

  lst <- lapply(lst, function(x) colnames(x) <- LETTERS[1:5]

但是这会覆盖原始值而不是重新命名列。 for循环可以解决这个问题:

 for(i in 1:length(lst)){colnames(lst[[i]]) <- LETTERS[1:5]}

但是由于我的真实数据包含包含数百个矩阵的列表,因此这种方法似乎效率低下。有没有办法实现这个la / lapply?似乎我必须遗漏一些简单的东西。我们将非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

这有点笨拙,但你的函数可能会返回矩阵而不仅仅是名字。

lst <- lapply(lst, function(x) {colnames(x) <- LETTERS[1:5];x})