2012-09-01 3 views
2

Rcpp에 의존하는 R 패키지를 만들었습니다. 이 패키지의 함수는 반복 n 회마다 인쇄 문을 보여야합니다. 그래서 몇 초마다 R 콘솔에 새로운 라인이 보일 것으로 예상됩니다.Rcpp : Mac에서 로딩 휠을 보여 주며 거의 동결합니다.

이상한 점은 R GUI에서 내 기능을 실행하면 커서가 로딩 휠이되고 R이 거의 "얼어 버린다"는 것입니다. 계산이 완료되면 로딩 휠이 한 번 사라집니다.

이 상황의 최소한의 예는 다음과 같이 요약된다 :

library(inline) 
library(Rcpp) 
test <- cxxfunction(
signature(), 
body= ' 

RNGScope scope; 
for (int i = 0; i < 100; i++) 
{ 
sleep(1); // sleep one second at each iteration. this sleep is 
// replaced by something in my code 
if (i%20==0) Rprintf("\v%d iterations are done...",i); 
} 

return wrap(1); 
' , 
plugin="Rcpp" 
       ) 

test()// freeze for 100 seconds! 

은 또한 코드가 터미널에서 실행되는 경우 내가 예상대로, 새로운 라인이 20 초마다 나타나는 것을 발견했다. 하지만 R GUI에서 실행하는 것을 선호합니다.

이런 일이 왜 누군가가 말해 줄 수 있다면 감사하겠습니다 ..

나는 맥을 사용하고 있습니다.

답변

1

질문은 Windows의 Rgui가 아니라 Mac의 Rapp에 관한 것입니다. 아래의 솔루션은 나를 위해 작동이 같은 R_FlushConsole 및 R_ProcessEvents와 Rprintf를 수행

RNGScope scope; 
for (int i = 0; i < 100; i++) { 
    sleep(1); // sleep one second at each iteration. this sleep is 
       // replaced by something in my code 
if (i%20==0) { 
    Rprintf("\v%d iterations are done...\n",i); 
    R_FlushConsole(); 
    R_ProcessEvents(); 
} 

return wrap(1); 
2

Rgui가 출력을 버퍼링합니다. 나는 Rgui를 사용하지 않지만 출력이 버퍼링되는지 여부를 제어하는 ​​설정을 찾으십시오. R 코드의 경우 flush.console을 사용하여 출력을 강제로 표시 할 수 있지만 C++ 코드가 어떻게 작동하는지 완전히 확신 할 수는 없습니다.

+0

+1 -이 Rcpp과는 거의 무관하고 단지 내 기억이 정확하다면,이, Windows에서 Rgui에 관한 것입니다 설정이 버퍼링을 해제하도록 토글합니다. –

+0

맥에서 R.app GUI를 사용하고 있음을 분명히하자. – ThePrincess

관련 문제