2011-08-04 5 views
5

Windows의 명령 프롬프트에서 RGui에 매개 변수를 전달할 수 있는지 궁금합니다. 나는 RSCRIPT과 함께 할 것처럼RGui에 매개 변수로 스크립트 전달

RGui myScript.r param1 param2 

처럼 뭔가를하고 싶지만 나는 GUI를 표시해야합니다.

여기 내 필요에 대한 정보가 더 있습니다. 내 C# 양식 응용 프로그램에 R로 작성된 GUI를 포함시키고 싶습니다. 폼에서 버튼을 누르면 응용 프로그램이 스크립트와 일부 매개 변수로 RGui를 호출하는 프로세스를 시작합니다. 이것은 지금까지 RScript로는 잘 작동했지만 지금은 R이 대화 형 모드에 있어야하는 그래픽을 표시하고 있습니다. 이 것 "작업"그러나 매우 경솔한입니다 :

 myProcess.StartInfo.FileName =Pathing.GetUNCPath(r_path) + "\\Rscript"; 
     string script_path=Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.Parent.FullName.ToString(); 
     myProcess.StartInfo.Arguments = Pathing.GetUNCPath(script_path) + "\\display.r " + data_path; 
     myProcess.StartInfo.UseShellExecute = true;   
     myProcess.Start(); 
     myProcess.WaitForExit(); 
+1

http://stackoverflow.com/questions/6940022/running-r-interactively-from-windows-command-prompt –

+2

의 복제본을 앞두고 @Jack Maney : 오, 아니에요. Rscript와 RGui에는 아주 큰 차이가 있습니다. 실제로 OP가 여기에서 묻는 것은 Rscript에서는 매우 가능하며 imho는 RGui에서는 불가능합니다. –

+2

@Jack, 나는 그것이 중복이라고 생각하지 않는다. 이 질문은 링크 된 Q가 R의 대화 형 세션을 시작하는 방법을 묻는 동안 R의 인스턴스간에 개체 (또는 호출)를 보낼 수 있는지 묻습니다. –

답변

7

로 말했다, 당신은 일반적으로 그렇게 할 수 없습니다. Rprofile 또는 Rprofile.site (자세한 내용은 시작을 참조하십시오) 또는 this site을 해킹하면 해결할 수 있지만 코드는 다른 컴퓨터로 이식 할 수 없습니다. 따라서 정말로 운이 좋고 대담한 느낌이 들면 다음을 시도 할 수 있습니다.

Args <- commandArgs(trailingOnly=TRUE) 
if(length(Args)>0 & sum(grepl(" -f ",commandArgs()))==0){   
    if(grepl("(?i).r$",Args[1])){ 
     File <- Args[1] 
     Args <- Args[-1] 
     tryCatch(source(File) , error=function(e) print(e)) 
    } 
} 

이 당신이 할 수 있습니다 :

Rgui --args myscript.r arg1 arg2 
Rscript myscript.r arg1 arg2 
R --args myscript.r arg1 arg2 
R -f myscript.r --args arg1 arg2 

당신은 (설치하여 R의는/etc 폴더에서 찾을 수 있습니다) 당신의 Rprofile 파일이나 Rprofile.site에이 코드를 추가

--args 인수는 @iterator가 경고하는 팝업을 처리합니다. 이 코드는 기본 환경 (이 아니라.GlobalEnv!)에 들어있는 변수 Args을 생성합니다. 이 변수는 파일 이름을 제외한 모든 인수를 포함합니다.

Rgui 또는 R 호출하면
#dumb script 
print(Args) 

는 또한 공급 된 파일의 이름이 포함 된 변수 파일이있을 것이다 : 당신은 나중에 스크립트에서 하나, 예를 들어 액세스 할 수 있습니다.

rProfile을 변경하면 다른 컴퓨터로 이전 할 수 없습니다. 그래서 이것은 개인적인 용도로만 사용됩니다. 또한 -args 뒤에 -f를 매개 변수로 줄 수 없거나 오류가 발생합니다.

편집 : "path/to/new-files /"에서 발생할 수 있으므로 "-f"보다 "-f"를 더 잘 검색합니다.

+0

+1 화려한! 미친! 나는 환경 변수에서'R_PROFILE'이 가리키는 어떤 파일에도 똑같이 적용되어야한다고 믿습니다. 그래서'.Rprofile' 파일에있을 필요는 없습니다. 하지만, 나는이 같은 @ 주인의 주인이 아니에요. ;-) – Iterator

+0

이 답변 때문에이 질문에 찬성하고 있습니다. 천재 야. 편집을 위해서는 – Iterator

+0

@ jakob r Thx가 적합합니다. –

3

(업데이트) 경고 : 여기 내가 사용하고 코드입니다. 내가 알 수있는 한, Rgui는 그러한 스크립트 매개 변수를 가져 가기위한 것이 아닙니다. @Joris는 나에게 수용 가능한 매개 변수의 목록이 Rgui --help에 나열되어 있다고 지적했습니다.

아래의 방법을 따르면, 어떤 사람들은 광란의 길에 있다고 생각할 것입니다. 반면에, 미친 사람들은 당신이 천재라고 생각할 것입니다. 모두는 당신이 사용하는 물건에서 이것을해서는 안된다는 것에 동의 할 것입니다.

경고의 끝.

스크립트 이름이 .Rprofile 인 경우 스크립트가 제공됩니다. commandArgs()을 나타내는 .Rprofile 파일 (또는 환경 변수)을 작성하면 명령 행을 구문 분석하도록 설정할 수 있습니다.

R에서 팝업을 무시하고 오류를 표시합니다. 잘못된 것이 수행되었음을 나타냅니다.

그것은 가치가 무엇인지,이 Rstudio의 할 일 목록에있을 수 있습니다 경우 : http://support.rstudio.org/help/discussions/problems/823-pass-command-line-parameters-to-r

+1

절대적으로 이포 할 수없는 것을 포함하여 다른 많은 것들을 깰 수 있습니다. 만약 누군가 내가 저에게 코드를 제공한다면, 나는 라이플을 사는 것을 고려할지도 모른다 ... –

+0

@Joris : 그때까지 기다리면, 너무 늦을지도 모른다. :) – Iterator

+0

@Joris : 이제는 이와 같은 코드를 생성하고 있습니다. :) – Iterator

관련 문제