熔化大型数据帧——reshape2 的熔化是否有实际大小限制?

Melting large dataframes--is there a practical size limit for reshape2's melt?

问题

我正在尝试将加载到具有大约 11k 变量和 2k 行的数据框中的调查数据集重塑为长(呃)格式,以便对循环问题产生的变量进行一些分析。我还没有找到解决内存分配错误的方法。

我是否达到了在数据帧上使用 melt 的实际大小限制(CSV 格式约为 28MB)?是否有不同的方法来使用 melt,或者您会为此目的使用不同的 function/library 吗?

到目前为止我尝试了什么

我试过使用 reshape2 的 melt 函数,它应该很简单,但会立即出现内存错误 ("cannot allocate vector of size...")。

然后我尝试将循环变量分解成块,以便让许多较小的数据帧融化然后重新构成。这给了我类似的错误(无法分配更小的尺寸)。

作为参考,我的数据有一个标识符字段("SbjNum"),一些只出现一次的变量(大约1900个),99个变量每个出现100次(前缀为"I_X_I_Y",其中 X 和 Y 标识循环)——并且应该熔化成对应于唯一 X 和 Y 的行。

天真地使用 melt 看起来像这样:

molten <- melt(data, id.vars = c("SbjNum"))

到目前为止我尝试过的分块看起来像这样:

#all variable names produced by the loops
loops <- names(data)[grep("I_\d{1,2}_I_\d{1,2}",names(data))] 

#setting number of desired chunks
nloopvars <- length(loops)
nchunks <- 100

#make nchunks indexers to subset my data
chunks <- lapply(#indices of loops split into nchunks groups
                 split(1:nloopvars, sort(1:nloopvars%%nchunks)), 
                 function(v){loops[v]}
                 )

#melt little subsets of the data       
molten <- lapply(chunks,
                    function(x){
                      # take only identifier and a subset of loop vars
                      df <- data[c("SbjNum", x)] 
                      # melt the loop vars
                      return(melt(df, id.vars = "SbjNum"))
                      }
                    )

编辑:在终止并重新启动 R 以及以多种不同方式清除我的工作空间后,方法 #2 现在可以使用了。

在终止并重新启动 R 并多次清除工作区后,我自己的 "chunking" 方法现在起作用了(参见问题)——我建议尝试此方法以防其他人遇到类似问题。

[还有一个问题是什么尺寸的熔化才有意义,但我现在可以在不知道答案的情况下生活。]