私は1000個の行列を持っていますA1, A2, A3,...A1000.
for ループでは、単純に各行列の colMeans() を取得したいと思います。
for (i in 1:1000){
means[i,]<-colMeans(A1)
}
各マトリックス Ax に対してこれを行いたいと思います。A1 の代わりに Ai を for ループに入れる方法はありますか?
私は1000個の行列を持っていますA1, A2, A3,...A1000.
for ループでは、単純に各行列の colMeans() を取得したいと思います。
for (i in 1:1000){
means[i,]<-colMeans(A1)
}
各マトリックス Ax に対してこれを行いたいと思います。A1 の代わりに Ai を for ループに入れる方法はありますか?
したがって、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)
最初の質問では、「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 ループを適用するには、通常、次の 2 つのオプションのいずれかを実行できます。
インデックスによるループオーバー: 例:
for(i in 1:10){head(mat[i])} #単純化した例
「直接」ループする
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))