2014-02-23 47 views
4

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

这是做在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) 

但总是收到:

​​3210

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年9月25日) - “飞盘风帆” 平台:x86_64-pc-linux-gnu(64位)。 我使用的程序(MAST)在字母列表中查找序列模式,并且是在http://meme.nbcr.net/meme/doc/meme-install.html中找到并通过命令行运行的MEME SUIT版本4.9.1的一部分。桅杆命令行的用法是:

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

回答

9

建设要与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脚本文件并调用相反,从河的东西传递参数,如:

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

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