我正在编写一个基于 plyr 的脚本来读取位于不同目录中的文件的输入,处理该输入,然后将输出写入不同的位置。由于我有很多输入,因此将doMC与d_ply一起使用是有意义的,但我惊讶地发现一些 plyr 函数不接受 .parallel 参数!
快速查看plyr 文档可以确认没有一个处理输出的函数(例如a_ply、l_ply、d_ply)接受 .parallel 参数:
d_ply Split data frame, apply function, and discard results.
Usage
d_ply(.data, .variables, .fun = NULL, ..., .progress = "none", .print = FALSE)
我的问题:有谁知道为什么会这样?
下面是一个具体的例子。我对 plyr 的调用看起来像这样
d_ply(input_df, c("ImageFiles","ShapeFiles", "FociFiles"), merge_files, .parallel=TRUE)
其中input_df是一个包含输入文件名的 3xN 数据框:
input_files[1:3,]
ImageFiles ShapeFiles
1 SQL_1_1_image.CSV SQL_1_1_object.CSV.out
2 SQL_10002_10101_image.CSV SQL_10002_10101_object.CSV.out
3 SQL_1002_1101_image.CSV SQL_1002_1101_object.CSV.out
FociFiles
1 SQL_1_1_object.CSV.out
2 SQL_10002_10101_object.CSV.out
3 SQL_1002_1101_object.CSV.out
函数merge_files应用于 input_df 的每一行。它读取 3 元组中指定的每个文件,处理每个文件的内容,并将这些内容合并到一个输出数据帧中,然后写入另一个目录。
但是,当我尝试测试时:
d_ply(input_files, c("ImageFiles","ShapeFiles", "FociFiles"), merge_files, .parallel=TRUE)
我遇到了这个错误:
Error in .fun(.data[[i]], ...) : unused argument(s) (.parallel = TRUE)
在此先感谢您提供任何启发性的答案!