2014-02-23 19 views
4

프로그래밍에 익숙하지 않고 주로 R 내에서 일부 스크립트를 수행 할 수 있지만 내 작업을 위해서는 외부 프로그램을 호출해야합니다. 이 프로그램은 우분투의 터미널에서 작동하려면 먼저 setenv를 사용하고 프로그램을 실행해야합니다. Google 시스템()과 Sys.setenv() 함수를 찾았지만 유감스럽게도 함수를 만들 수 있습니다. 시스템에서 여러 명령어로 R에서 외부 프로그램 호출하기

는 우분투 터미널에서 작업을 수행하는 코드입니다 : 처음 두 인수가 입력 파일은

$ 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"" 

. 이것이 이미 대답 되었다면, 내 인터넷 검색은 가난 해졌고 나는 그 응답에 대한 링크를 고맙게 생각할 것이다.

감사합니다.

카를로스

추가 세부 정보 : 우분투 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 넣어 공간을 중지를, 문자열에 따옴표를 역 인용 부호로 묶어 보존합니다.

system(cmd) 대신 print(cmd)을 사용하여 실행하기 전에 테스트하여 올바른 명령이 만들어 졌는지 확인하십시오.

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

을 실행하기 전에 R에 TESTING=TRUE 또는 FALSE을 설정 어쩌면 않습니다.

cmd = paste("/home/me/bin/dojob.sh ",i,i+1) 
system(cmd) 
: 당신이 system 호출 당 하나 이상의 쉘 명령을 실행하려는 경우

, 같은 R. 뭔가에서 매개 변수를 전달, 하나 개의 쉘 스크립트 파일에 모두 넣고 그 대신 전화를 더 좋을 수도

그리고 나서 dojob.sh은 args를 구문 분석하는 쉘 스크립트입니다. 쉘 스크립팅을 좀 더 배워야합니다.