我有 1000 个矩阵命名A1, A2, A3,...A1000.
在 for 循环中,我想简单地获取每个矩阵的 colMeans() :
for (i in 1:1000){
means[i,]<-colMeans(A1)
}
我想对每个矩阵 Ax 执行此操作。有没有办法将 Ai 而不是 A1 放在 for 循环中?
我有 1000 个矩阵命名A1, A2, A3,...A1000.
在 for 循环中,我想简单地获取每个矩阵的 colMeans() :
for (i in 1:1000){
means[i,]<-colMeans(A1)
}
我想对每个矩阵 Ax 执行此操作。有没有办法将 Ai 而不是 A1 放在 for 循环中?
所以,一种方法是:
for (i in 1:1000){
means[i,]<-colMeans(get(paste('A', i, sep = '')))
}
但我认为这忽略了一些评论的重点,即你可能不得不做这样的事情:
csvs = lapply(list.files('.', pattern = 'A*.csv'), function(fname) {
read.csv(fname)
})
那么你的问题的答案是:
means = lapply(csvs, colMeans)
我不完全理解,但也许您已将每个矩阵分配给不同的变量名?这不是最好的结构,但您可以从中恢复:
# Simulate the awful data structure.
matrix.names<-paste0('A',1:1000)
for (name in matrix.names) assign(name,matrix(rnorm(9),ncol=3))
# Pull it into an appropriate list
list.of.matrices<-lapply(matrix.names,get)
# Calculate the column means
column.mean.by.matrix<-sapply(list.of.matrices,colMeans)
您最初的问题要求提供“for循环”解决方案。但是,如果我们使用“应用”功能,有一种简单的方法可以获得所需的结果。
也许将矩阵放入一个列表中,然后应用一个函数会被证明是值得的。
### Create matrices
A1 <- matrix(1:4, nrow = 2, ncol = 2)
A2 <- matrix(5:9, nrow = 2, ncol = 2)
A3 <- matrix(11:14, nrow = 2, ncol = 2)
### Create a vector of names
names <- paste0('A', 1:3)
### Create a list of matrices, and assign names
list <- lapply(names, get)
names(list) <- names
### Apply the function 'colMeans' to every matrix in our list
sapply(list, colMeans)
我希望这很有用!
正如其他人已经写的那样,使用列表可能是您的最佳选择。首先,您需要将 1000 个矩阵放在一个列表中,最容易使用 for 循环完成(参见上面的几篇文章)。下一步更重要:使用另一个 for 循环来计算汇总统计信息 ( colMeans
)。
要通过 R 对象应用 for 循环,通常可以执行以下两个选项之一:
按索引循环:例如:
for(i in 1:10){head(mat[i])} #simplistic example
“直接”循环
for(i in mat){print(i)} #simplistic 示例
在循环遍历 R 列表的情况下,FIRST 选项将更容易设置。这是适用于您的示例的想法:
column_means <- rep(NA,1000) #empty vector to store column means
for (i in 1:length(list_of_matrices)){
mat <- list_of_matrices[[i]] #temporarily store individual matrices
##be sure also to use double brackets!
column_means <- c(column_means, colMeans(mat))