ddply内存要求,解决方案
ddply memory requirements, solutions
我有一列,在该列中我有大约 5-10 个实例,每个实例都有几十万个不同的字符串。我想对它们进行计数,然后将计数放入相应的行中。所以我这样做:
newdf <- ddply(oldDF, ~BigVariable, transform, counts = length(BigVariable))
在我开始接近 100 万 rows/1GB 文件大小之前,一切正常。
每次使用此大小或更大的数据集时,我的 R 会话都会因致命错误而崩溃。然而,有 28 Gb 的可用内存,我不明白为什么这会成为问题,但我从 this thread 的理解是 ddply 有时会占用大量内存。
不过我很确定这是一个内存问题,因为在我的系统监视器崩溃之前,我看到修改后的内存和正在使用的内存争夺空闲内存,直到绿色条获胜并占据最后一位,R 在同一时刻崩溃。
- 我已经做了显而易见的事情并使用 data.table 来更有效地使用内存。
- 一个变量包含大量因素。我尝试将有问题的变量更改为一个字符,希望它能更好地利用 data.table,但没有骰子。
我还应该尝试什么?有没有一种内存效率更高的方法来获取这些计数并将它们放在所有适当的行中?
dplyr
是 ddply
的更好替代方案,因为它可以更有效率。
library(dplyr)
oldDF %>%
group_by(BigVariable) %>%
mutate(counts = n())
或 data.table
library(data.table)
setDT(oldDF)[, counts := .N, by = BigVariable]
我有一列,在该列中我有大约 5-10 个实例,每个实例都有几十万个不同的字符串。我想对它们进行计数,然后将计数放入相应的行中。所以我这样做:
newdf <- ddply(oldDF, ~BigVariable, transform, counts = length(BigVariable))
在我开始接近 100 万 rows/1GB 文件大小之前,一切正常。 每次使用此大小或更大的数据集时,我的 R 会话都会因致命错误而崩溃。然而,有 28 Gb 的可用内存,我不明白为什么这会成为问题,但我从 this thread 的理解是 ddply 有时会占用大量内存。
不过我很确定这是一个内存问题,因为在我的系统监视器崩溃之前,我看到修改后的内存和正在使用的内存争夺空闲内存,直到绿色条获胜并占据最后一位,R 在同一时刻崩溃。
- 我已经做了显而易见的事情并使用 data.table 来更有效地使用内存。
- 一个变量包含大量因素。我尝试将有问题的变量更改为一个字符,希望它能更好地利用 data.table,但没有骰子。
我还应该尝试什么?有没有一种内存效率更高的方法来获取这些计数并将它们放在所有适当的行中?
dplyr
是 ddply
的更好替代方案,因为它可以更有效率。
library(dplyr)
oldDF %>%
group_by(BigVariable) %>%
mutate(counts = n())
或 data.table
library(data.table)
setDT(oldDF)[, counts := .N, by = BigVariable]