2012-04-06 5 views
4

R 세션을 knitr에서 어떻게 시작할 수 있습니까? 나는 동등하지 않기 때문에 오히려 rm(list=ls())과 같은 것을 사용하기보다는 새로운 세션을 시작하고자한다.knitr에서 새로운 R 세션 시작

<<myname>>= 
#some R code 
@ 
<<another_chunk>>= 
#start a new R session 
#more R code 
@ 
+1

아마도'epicalc' 라이브러리의'zap()'이 도움이 될 수 있습니다. R을 다시 시작하여 원하는 것을 지정할 수 있습니까? –

+0

@ EricD.Brean 공정한 질문. 나는 정말로'R'에 대해 충분히 알지 못하지만, 나는 주위에 많은 것들 (환경, 물체 등)을 남길 걱정이되는 아주 긴 프로그램을 가지고있다. 'zap'은 재미 있지만 깨끗한'R' 세션을 갖는 것이 훨씬 안전하다고 느낄 것입니다. –

+0

그래서, 당신은 특별한 문제가 없지만, R은 많은 것들을 남겨 두려고합니다 ._ Windows 배경에서 _worry_를 어떻게 가져 왔는지 알 수 있지만, 걱정할 필요는 없다고 생각합니다. 어쨌든. –

답변

3

좋아, 지금은 an answer on the R-help list by Georg Ruß에서 영감을 당신을 위해 더 실질적인 무언가를 가지고있다. R이 시작시 어떻게 돌아 왔는지 세 가지를 제안합니다.이 6 단계 매뉴얼을 작성했습니다. 재설정 할 때

첫째, 당신은 당신이 시작에서 실행 한 패키지의 문자열을 저장

foo <- .packages() 

둘째, (당신이 다른 코드를 실행하기 전에이, 다른 것을하기 전에 수행해야합니다) 당신은 또한 언급으로 R은 모든 개체를 제거하는

rm(list=ls()) 

를 실행합니다. 그런 다음 세 번째로 실행하면

bar <- .packages() 

현재 패키지 문자열을 가져옵니다.

foobar <- setdiff(bar, foo) 

다섯째, 다음, 당신은이 해결 방법 루프

toRemove <- paste("package:", foobar, sep='') 
#or paste0("package:", foobar) in R-2.15.0 or higher 
for(i in seq_along(foobar)) {   
    detach(toRemove[i], character.only=TRUE)  
} 

여섯째, 당신의 설정에 따라, 당신은 당신의 .Rprofile 소스

source(".Rprofile") 

이이 차이를 제거 R을 시작했을 때의 상태로 R을 넣어야합니다. 나는 뭔가를 간과 할 수 있었다.

+0

고맙습니다. 뭔가 다른 것을 변경해야 할 필요가 있으면 다시 게시 해 드리겠습니다. –

+0

@RichieCotten, 환경에'toRemove'를 남기지 않기 위해 배치했습니다. 루프가 크게 느려지는 것 같습니까? –

3

대신 knitr에 새로운 R 세션을 시작하는,이 같은 단지 터미널 (또는 명령 창)에 새로운 R 세션을 시작하는 당신을 추천 할 것입니다 : 당신이 Windows에서 경우

R -e "library(knitr); knit('your_input.Rnw')" 

, 당신을 R의 bin 디렉토리를 환경 변수 PATH에 두어야합니다 (Windows 환경에있는 경우이 방법을 설명하는 데 너무 지겨워 야하므로 LyX Sweave manual 참조).

그러나 대부분의 편집자는 Sweave 또는 knitr을 호출 할 때 새로운 R 세션을 시작합니다. LyX 및 RStudio 등. 더 많은 가능한 편집자를 찾을 수 있습니다. http://yihui.name/knitr/demo/editors/R -e ...을 터미널에 실제로 호출 할 필요가 없습니다.

+0

이 옵션을 이용해 주셔서 감사합니다. 나는'PATH'가 문제가되지 않도록 우분투를 사용하고 있습니다. –

+0

아직 문제가 있습니다. 새로운 R 세션 *을 knitr 내에서 시작해야합니다. 내가 q() 다시 시도했지만 그 작동하지 않습니다. 문제는 다음과 같이 knitr chunk의 .tex 파일 (멋진 편집기 없음)에있는 .R 파일을 소스로 사용한다는 것입니다.'source ('file1.R')'그리고 나서'source ('file2.R') 그러나 실제로 나는 그 사람들이 같은 R 세션에서 실행되기를 바라고있다. 'rm (list = ls())'과'gc()'를 두 개의'source '사이에 놓아도 RAM으로 인한 문제는 해결되지 않습니다. 의견 있으십니까? –

+0

@XuWang 다른 질문입니다. '? source' (구체적으로'local' 인자)를보십시오. –