为什么 ddply 命令在进度条达到 100 后需要这么长时间?
Why does a ddply command take so long after the progress bar gets to 100?
我有一个包含 10000 行的数据文件。该文件包含 100 行的块,第一列中有不同的因子,我使用 ddply 来处理它们。例如像这样:
result.df = ddply(data.df, "V1", calc_stuff, .progress = "text")
message("done!")
ddply 进度条达到 100% 大约需要一分钟。然而,在处理脚本中的下一行之前,R 会再执行 "something" 5-7 分钟(此示例中打印消息)。
那时候R在做什么?在 "result.df" 中收集结果?我能以某种方式加快速度吗?我有很多这样的文件要处理。
ddply
采用以下方法:
- 拆分数据集。
- 将函数应用于拆分的每个组件
- 将组件组合成一个大的结果数据集
进度条可能处理第 2 步,并说明处理每个块的进度。第 3 步在您的情况下需要时间,并且不包含在进度条中。
为了加快您的分析速度,我将停止使用 plyr
并开始使用 dplyr
。这比 plyr
和 plyr
的后继者快几个数量级。有关详细信息,请参阅 tutorial I wrote。
您的代码示例可以归结为:
results.df = data.df %>% group_by(V1) %>% calc_stuff()
我有一个包含 10000 行的数据文件。该文件包含 100 行的块,第一列中有不同的因子,我使用 ddply 来处理它们。例如像这样:
result.df = ddply(data.df, "V1", calc_stuff, .progress = "text")
message("done!")
ddply 进度条达到 100% 大约需要一分钟。然而,在处理脚本中的下一行之前,R 会再执行 "something" 5-7 分钟(此示例中打印消息)。
那时候R在做什么?在 "result.df" 中收集结果?我能以某种方式加快速度吗?我有很多这样的文件要处理。
ddply
采用以下方法:
- 拆分数据集。
- 将函数应用于拆分的每个组件
- 将组件组合成一个大的结果数据集
进度条可能处理第 2 步,并说明处理每个块的进度。第 3 步在您的情况下需要时间,并且不包含在进度条中。
为了加快您的分析速度,我将停止使用 plyr
并开始使用 dplyr
。这比 plyr
和 plyr
的后继者快几个数量级。有关详细信息,请参阅 tutorial I wrote。
您的代码示例可以归结为:
results.df = data.df %>% group_by(V1) %>% calc_stuff()