使用ddply汇总耗尽内存

时间:2013-07-13 16:34:10

标签: r

我有一个大格式的重复测量数据帧(41764个观测值)。我试图总结数据帧并为每个不同的个体创建一个具有单个值的新数据帧(总共3112个观察值)。我正在使用ddply总结,我的特定案例的更多背景是New dataframe with difference between first and last values of repeated measurements?

我正在使用此代码

df2 <- ddply(df1, .(indv), summarize, df1['value1'], df1['value2'])  

但是当我运行它时,我收到此错误

Error: cannot allocate vector of size 991.6 Mb
In addition: Warning messages:
1: In output[[var]][rng] <- df[[var]] :
Reached total allocation of 8088Mb: see help(memory.size)
2: In output[[var]][rng] <- df[[var]] :
Reached total allocation of 8088Mb: see help(memory.size)
3: In output[[var]][rng] <- df[[var]] :
Reached total allocation of 8088Mb: see help(memory.size)
4: In output[[var]][rng] <- df[[var]] :
Reached total allocation of 8088Mb: see help(memory.size)

我不知道如何解决这个问题。我已经尝试将所有内存驻留数据帧保存为文件,关闭R,然后将它们导回到R.这似乎至少在最初节省了内存,但是在运行ddply总结时我仍然用完了RAM。

我在这台机器上有8 GB的RAM,所有这些都可用于R.有谁知道我能做些什么来解决这个问题?

也许我不应该使用ddply总结,也许有更好的方法来做到这一点?

编辑:似乎我可能错误地发出了命令。像

这样的命令
df2 <- ddply(df1, .(indv), summarize, value1=(tail(value1, 1)), value2=(tail(value2, 1)), group=(tail(group, 1)))

似乎给出了我正在寻找的结果。

1 个答案:

答案 0 :(得分:1)

好的,感谢LostBrit的帮助,我开始意识到我发出了错误的命令(或者我可能不清楚我到底想要做什么)。似乎这段代码给出了我想要的结果:

df2 <- ddply(df1, .(indv), summarize, 
       value1=tail(value1, 1), 
       value2=tail(value2, 1), 
       group =tail(group, 1))

感谢大家的帮助!