【问题标题】:R parallel system call on filesR 对文件的并行系统调用
【发布时间】:2016-03-14 21:46:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: r system dcraw


    【解决方案1】:

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

    Parallel execution of shell processes

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

    【讨论】:

    • 不幸的是,我在 Windows 命令行中完全不知所措,所以我将花时间切换到 Linux,这应该会让生活更轻松!不过还是谢谢。
    【解决方案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 并行)。

    【讨论】:

    • 你好西蒙,你的假设是错误的,但那是因为我错了。它确实在 Windows 上,我不知道在 Windows 上并行是不可能的。不过谢谢你的回答。
    • 对于 Windows,似乎有 wxargs 允许并行执行 - 我没有测试它,我想,因为我不运行 Windows - 请参阅 pirosa.co.uk/demo/wxargs/wxargs.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2015-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2013-08-09
    相关资源
    最近更新 更多