0

私は1000個の行列を持っていますA1, A2, A3,...A1000.

for ループでは、単純に各行列の colMeans() を取得したいと思います。

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

各マトリックス Ax に対してこれを行いたいと思います。A1 の代わりに Ai を for ループに入れる方法はありますか?

4

4 に答える 4

3

したがって、1つの方法は次のとおりです。

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 に答える
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 ループを適用するには、通常、次の 2 つのオプションのいずれかを実行できます。

  1. インデックスによるループオーバー: 例:

    for(i in 1:10){head(mat[i])} #単純化した例

  2. 「直接」ループする

    for(i in mat){print(i)} #単純化した例

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 に答える