用于创建从 R 中的两个不同数据帧生成的矩阵列表的循环

a loop to create a list of matrices generated from two different data frames in R

我有两个数据框。 df1 和 df2。都有 c 列
使用聚类方法,我最终得到了 10 个聚类。每个 df 的相同集群是正确的。这意味着例如 df 的第 4 行进入同一个集群。
我向两个 dfs 添加了一个簇列,显示了每一行的分配簇。

我想创建一个列表。
这个列表包含 10 个矩阵,这样。
矩阵 1,是一个 2*c 矩阵。它的第一行是通过 df1 中位于簇 1 中的那些行的 colmeans 获得的。它的第二行是通过 df2 中位于簇 1 中的那些行的 colmeans 获得的。
和矩阵 2 ,簇 2 的 colmeans 等等。
这就是我所做的。但我只得到第 10 个矩阵,而不是矩阵 1 到 10 的列表。
我将不胜感激。

k=10
for(i in 1:k){
df1.mean.vec <- colMeans(subset(df1, clster == i))
df2.mean.vec <- colMeans(subset(df2, clster == i))
Mean.mat <- as.matrix(rbind(df1.mean.vec, df2.mean.vec), row.names= FALSE) 
Mean.list <- list() 
Mean.list[[i]] <- Mean.mat
names(Mean.list)[i] <- i
}

Mean.list 应该在循环外初始化,它可以是长度为 k

的 NULL list
Mean.list <- vector('list', k)
for(i in 1:k){
   df1.mean.vec <- colMeans(subset(df1, clster == i))
   df2.mean.vec <- colMeans(subset(df2, clster == i))
   Mean.mat <- as.matrix(rbind(df1.mean.vec, df2.mean.vec), row.names= FALSE) 

   Mean.list[[i]] <- Mean.mat
   rm(Mean.mat)
   gc()
   names(Mean.list)[i] <- i
}