2011-12-12 5 views
0

사용자가 데이터를로드하고 조작 할 수있는 인터페이스를 개발했습니다. GUI는 Java로 개발되었으며 모든 계산 자료는 R에 의해 백그라운드에서 수행되고 jri와 함께 연결됩니다. 사용자는 R을 사용하는 데 대한 지식이 없어도 모든 옵션과 버튼을 사용할 수 있습니다. 그러나 필요한 경우 사용자에게 몇 가지 코드를 작성할 수있는 옵션을 제공하고 싶습니다. 나는 사용자가 콘솔을 통해 상호 작용하자 Rengine를 시작하지하려면 다음 코드를 사용하는 경우rJava startMainLoop() 함수가 Java 작업을 종료합니다.

이 모든 것이 잘 작동 : 그래서 여기 내 문제가

Rengine re=new Rengine(null, true, new TextConsole()); 
:

Rengine re=new Rengine(null, false, new TextConsole()); 

하지만이를 사용하는 경우

gui의 기능이 작동하지 않습니다. 데이터로드 후

re.startMainLoop(); 

기능을 사용해 보았습니다.

newVariable<-data$column1 

그러나 다시 한번, 난 더 이상 GUI를 사용할 수 없습니다 : 나는 예를 들어 나는로드 된 데이터의 열에서 새 변수를 만들 수, R에서 '명령 줄에서 데이터를 조작 할 수 있었다. 왜 이것이 어떤 아이디어 나 설명을 얻었습니까? REPL이 실행되지 않을 경우 사전에

감사합니다,

아란 기본적으로

답변

0

는, R은 단순히 코드에서 eval 호출을 통해 사용됩니다. 실제 평가를 제외하고는 항상 통제권을가집니다. 그것은 당신이 거의 모든 것을 그렇게 할 수 있기 때문에 가장 보편적 인 용도입니다.

이벤트 루프 (REPL)를 사용하도록 설정하면 루프에서 사용되는 콜백 메서드를 구현해야합니다. 의도적으로 R은 구현해야하는 rReadConsole 콜백으로 만 컨트롤을 포기합니다. 예제 TextConsole은 데모로만 작동하며 차단 대기 (readLine())를 사용하여 GUI에서 사용하지 않으려 고합니다. GUI의 요소에 반응하도록 모든 콜백을 구현해야합니다 (GUI가 별도의 스레드에서 깨어나서 WriteConsole을 요소에 보내려면 ReadConsole에서 기다립니다). JGR이 어떻게 올바르게 수행되었는지 살펴볼 수 있습니다. 일반적인 목적의 GUI를 구축하지 않는다면, 나는 그 문제에 빠지지 않을 것이다 ...

(추 신 : rJava/JRI 질문에 대해서는 stats-rosuda-devel 메일 링리스트를 사용하십시오.