2

我必须转换大量 RAW 图像,并使用 DCRAW 程序来执行此操作。由于这个程序只使用一个核心,我想在 R 中并行化它。要调用这个函数,我使用:

system("dcraw.exe -4 -T image.NEF")

这导致在与 NEF 文件相同的文件夹中输出一个名为 image.tiff 的文件,这完全没问题。现在我尝试了多个 R 包来并行化它,但我只得到无意义的回报(可能是我造成的)。我想通过 r 中的这个系统调用运行一个大列表(1000多个文件),由 list.files() 获得

我只能找到 R 中变量的并行编程信息,但不能找到系统调用的信息。有人有什么想法吗?谢谢!

4

2 回答 2

2

如果您使用变量或system. 假设您不在 Windows 上(不支持并行),则可以在任何体面的系统上运行

parallel::mclapply(Sys.glob("*.NEF"),
  function(fn) system(paste("dcraw.exe -4 -T", shQuote(fn))),
  mc.cores=8, mc.preschedule=F)

它将并行运行 8 个作业。但是你也可以不使用 R 而是使用

ls *.NEF | parallel -u -j8 'dcraw.exe -4 -T {}'

而是(使用 GNU 并行)。

于 2015-12-09T15:43:59.163 回答
1

在 Windows 上,我使用此解决方案的修改版(投票最多的一个)来运行许多命令,同时运行不超过 4 或 8 个命令:

shell进程的并行执行

这不是 R 解决方案,但我喜欢它。

于 2015-12-09T16:39:19.030 回答