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

Rename columns for matrices nested inside a list in R

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

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

  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(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]}

但由于我的真实数据有包含数百个矩阵的列表,这种方法似乎效率低下。有什么方法可以用 lapply 来完成这个吗?看来我必须缺少一些简单的东西。您可以提供的任何帮助将不胜感激。

这有点尴尬,但您的函数可能 return 矩阵而不仅仅是名称。

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