我正在尝试将装入约11k变量和2k行的数据集的调查数据集重整为long(er)格式,以便对循环问题产生的变量进行一些分析。我还没有办法解决内存分配错误。
我是否达到了在数据帧上使用融合的实际大小限制(CSV格式约有28MB)?是否有使用熔体的其他方法,还是为此目的使用了不同的功能/库?
我尝试使用reshape2的melt函数,该函数应该很简单,但会立即产生内存错误(“无法分配大小向量...”)。
然后,我尝试将循环变量分解为大块,以使许多较小的数据帧融化,然后重新构成。这给了我类似的错误(无法分配的尺寸较小)。
作为参考,我的数据具有一个标识符字段(“ SbjNum”),仅出现一次的变量(大约1900个)和每个出现100次的99个变量(前缀为“ I_X_I_Y”,其中X和Y标识循环)-并应熔化成与唯一的X和Y相对应的行。
只是天真地使用熔化看起来像这样:
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现在可以使用。
答案 0 :(得分:0)
终止并重新启动R,并多次清理工作空间后,我自己的“分块”方法现在可以工作(请参阅问题)-我建议尝试此方法,以防其他人遇到类似问题。
[仍然存在一个问题,即融化的大小才有意义,但我现在还不知道答案就可以生存。]