2013-03-27 5 views
24

system2()를 사용하여 R 내에서 간단한 파이썬 스크립트를 호출하려고합니다. 내가 '너무 많은'메모리가 사용되면 작동하지 않는다고 말하는 막연한 정보를 읽었습니다.Rstudio 내에서 R 다시 시작

큰 데이터 세트를로드하고 그 중 일부 정보를 인수로 사용하여 system2()로 전달하면 Rstudio 호출에서 수동으로 "Restart R"을 클릭하는 경우에만 작동합니다.

내가 원하는 무엇 : 그대로

df <- read.csv('some_large_file.csv') 
###extracting some info called 'args_vec' 
for(arg in args_vec){ 
    system2('python', args) 
} 

이 작동하지 않습니다. for 루프는 단순히 전달됩니다.

내가 필요한 것 :

df <- read.csv('some_large_file.csv') 
###extracting some info called 'args_vec' 
###something that 'restarts' R 
for(arg in args_vec){ 
    system2('python', args) 
} 

This answer

아주 내가 원하는 것을 얻을하지 않습니다. 즉, 그것은 Rstudio 내에서 작동하지 않으며 "시스템"(이 경우 "system2"와 동일한 문제를 나타냄)을 호출합니다. 실제로, 위에서 언급 한 대답을 내 Rprofile.site 파일에 넣으면 rstudio가 즉시 닫힙니다.

"makeActiveBinding"을 사용하지 않고 일반적인 기능으로 제안을 시도했지만 제대로 작동하지 않았습니다. .

##restart R in r session -- doesn't work 
makeActiveBinding("refresh", function() { system("R --save"); q("no") }, .GlobalEnv) 

##nor did this: 
refresh <- function() { system("R --save"); q("no") } 

나는 위의 두 옵션의 변화의 숫자를 시도했지만이 긴 간단한 질문 어떤 느낌인지에 대한지고 있습니다. 나는 아직 시작 프로세스에 대해 이해하지 못하고 많이 "makeActiveBinding가"있다 누구도 올바른 방향으로 나를 가리킬 수 있습니까?

+0

정말 전체 R을 다시 시작해야합니까? 작업 공간을 지우는'rm (list = ls()) '을 사용하고'gc()'를 이용한 수동 가비지 콜렉션을 사용한다면 충분할 것인가? –

+0

@BenHunter 다시 시작한 후에'q'를 호출하기 때문에 RStudio가 바로 닫힙니다. 'q'를 호출하면 RStudio에서 Restart R을 선택하는 것과 똑같이해야합니다. –

+0

@Hemmo, 나는 이것이 옵션이라는 것을 알고 있으며,이 경우에는 좋은 선택이 될 수 있지만, 나는 이것을 해결하는 방법을 알고 싶다. 내 작업 공간을 잃지 않고 (또는 저장하고, 제거하고 다시로드하는 일없이) 그것). –

답변

0

t 내에 함수 호출을 포함 시키려고 했습니까? 그는 for 루프가 아닌 함수를 적용한다.

for 루프에서 시스템을 메모리 부족 상태로 실행하는 일부 코드를 적용하여 완벽하게 실행됩니다. 도움이 될까요?

39

Rstudio에서, 당신은에 의해 R 세션을 다시 시작할 수 있습니다

command/ctrl + shift + F10 

당신은 또한 사용할 수 있습니다

.rs.restartR() 
+1

명령 줄을 원하기 때문에 질문에 대답하지 않습니다 – Arthur

5

RStudio는 그렇게하도록되어이 문서화되지 않은 rs.restartR()을 가지고 다시 시작 R.를

그러나로드 된 패키지를 언로드하지 않으며 환경을 정리하지 않으므로 R을 다시 시작하면 몇 가지 의문점이 있습니다.

+0

사용 된 메모리를 모두 비우고 나중에 릴리스되었습니다 ... 그래서 (매우 유용한 경우도 있습니다) 어떤 작업을 수행합니다. –