重命名嵌套在 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})
我有一个包含多个矩阵的列表。每个矩阵中的行都是唯一的,但列代表每个矩阵中共有的变量。
下面的示例提供了我拥有的数据类型的示例:
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})