【问题标题】:Calling external program from R with multiple commands in system使用系统中的多个命令从 R 调用外部程序
【发布时间】:2014-02-23 09:02:42
【问题描述】:

我是编程新手,主要是我能够在 R 中编写一些脚本,但对于我的工作,我需要调用一个外部程序。为了让这个程序在 ubuntu 的终端上运行,我必须先使用 setenv 然后执行程序。谷歌搜索我找到了 system() 和 Sys.setenv() 函数,但不幸的是我可以让它起作用。

这是在 ubuntu 终端中运行的代码:

$ export PATH=/home/meme/bin:$PATH
$ mast "/home/meme/meme.txt" "/home/meme/seqs.txt" -o "/home/meme/output" -comp

其中前两个参数是输入文件,-o 参数是输出目录,-comp 是程序运行的另一个参数。

尽管它已经在终端中工作,但我需要在 R 中执行它的原因是因为我需要使用 1000 个不同的文件运行程序 1000 次,所以我想创建一个 for 循环,其中输入名称在每个循环中都会更改然后分析 R 中的每个输出。

我已经尝试过使用:

Sys.setenv(PATH="/home/meme/bin"); system(mast "/home/meme/meme.txt" "/home/meme/seqs.txt" -o "/home/meme/output" -comp )

system(Sys.setenv(PATH="/home/meme/bin") && mast "/home/meme/meme.txt" "/home/meme/seqs.txt" -o "/home/meme/output" -comp )

但总是收到:

Error: unexpected constant string in "system(mast "/home/meme/meme.txt""

Error: unexpected symbol in "system(Sys.setenv(PATH="/home/meme/bin") && mast "/home/meme/meme.txt""

在这一点上,我已经没有想法来完成这项工作。如果这个问题已经得到解答,那么我的谷歌搜索很差,我会很感激任何指向它的回复的链接。

非常感谢您的宝贵时间。

卡洛斯

其他细节:

我使用的是 Ubuntu 12.04 64 位版本,RStudio 版本 0.97.551,R 版本 3.0.2 (2013-09-25) -- “飞盘帆船” 平台:x86_64-pc-linux-gnu (64-bit) . 我使用的程序 (MAST) 在字母列表中找到一个序列模式,它是在 http://meme.nbcr.net/meme/doc/meme-install.html 中找到的 MEME SUIT 版本 4.9.1 的一部分,并通过命令行运行。 mast的命令行用法是:

mast    <motif file> <sequence file> [options]

【问题讨论】:

    标签: r shell command-line external-process


    【解决方案1】:

    paste构造你想执行的字符串并将它提供给system

    for(i in 1:10){
    cmd=paste("export FOO=",i," ; echo \"$FOO\" ",sep='')
    system(cmd)
    }
    

    注意使用sep='' 来阻止paste 插入空格,并在字符串中反引号以保留它们。

    在运行前使用print(cmd) 而不是system(cmd) 进行测试,以确保构建正确的命令。也许可以:

    if(TESTING){print(cmd)}else{system(cmd)}
    

    并在运行前在 R 中设置 TESTING=TRUEFALSE

    如果您要在每次 system 调用时运行多个 shell 命令,最好将它们全部放在一个 shell 脚本文件中并调用它,而不是从 R 传递参数。类似于:

    cmd = paste("/home/me/bin/dojob.sh ",i,i+1)
    system(cmd)
    

    然后dojob.sh 是一个解析参数的shell 脚本。你需要学习更多的 shell 脚本。

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 2015-01-01
      • 1970-01-01
      • 2018-03-09
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多