0

我有 1000 个矩阵命名A1, A2, A3,...A1000.

在 for 循环中,我想简单地获取每个矩阵的 colMeans() :

for (i in 1:1000){
means[i,]<-colMeans(A1)
}

我想对每个矩阵 Ax 执行此操作。有没有办法将 Ai 而不是 A1 放在 for 循环中?

4

4 回答 4

3

所以,一种方法是:

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)
于 2013-05-15T19:53:47.283 回答
1

我不完全理解,但也许您已将每个矩阵分配给不同的变量名?这不是最好的结构,但您可以从中恢复:

# 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)
于 2013-05-15T20:00:52.053 回答
0

您最初的问题要求提供“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)

我希望这很有用!

于 2013-05-15T20:07:18.237 回答
0

正如其他人已经写的那样,使用列表可能是您的最佳选择。首先,您需要将 1000 个矩阵放在一个列表中,最容易使用 for 循环完成(参见上面的几篇文章)。下一步更重要:使用另一个 for 循环来计算汇总统计信息 ( colMeans)。

要通过 R 对象应用 for 循环,通常可以执行以下两个选项之一:

  1. 按索引循环:例如:

    for(i in 1:10){head(mat[i])} #simplistic example

  2. “直接”循环

    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))
于 2016-10-10T01:12:53.690 回答