首页 > 解决方案 > 用于创建从 R 中的两个不同数据帧生成的矩阵列表的循环

问题描述

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

我想创建一个列表。
此列表包含 10 个矩阵,例如。
矩阵 1,是一个 2*c 矩阵。它的第一行是通过对簇 1 中的 df1 的那些行的 colmeans 获得的。它的第二行是通过对簇 1 中的 df2 的那些行的 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
}

标签: rlistdataframematrixcluster-analysis

解决方案


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

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
}

推荐阅读