developer tip

R 내에서 깨끗한 R 세션을 종료하고 다시 시작 하시겠습니까?

optionbox 2020. 10. 10. 09:57
반응형

R 내에서 깨끗한 R 세션을 종료하고 다시 시작 하시겠습니까?


R 내에서 별칭을 만들어 실행 q()한 다음 깨끗한 R 세션을 다시 시작할 수있는 방법이 있습니까?

그리고 예, 입력하기에는 너무 게으르고 q()편지 R:)


RStudio를 사용하는 경우 : command / ctrl + shift + F10

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

.rs.restartR()

R을 시작하는 방법에 따라 다음 줄 중 하나를 .Rprofile파일에 배치 하십시오.

makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv)

makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)

그런 다음 R 콘솔에 입력하십시오.

refresh

현재 세션을 종료하고 새 세션을 시작합니다.


.rs.restartR ()이 ctrl + shift + F10을 누르는 것과 유사하게 작동한다는 것을 알았습니다. 그러나 패키지를 언로드하지 마십시오


이전 게시물이지만 답변이 제대로 작동하지 않으므로 (저에게는 Windows를 사용하고 다른 사용자를 테스트하지 않았습니다) 솔루션을 추가하겠습니다. 내 용어 중 일부는 여기에서 벗어날 수 있지만 요점은 다음과 같습니다.

위의 답변은 제대로 작동하지 않습니다.

여기에 제출 된 대부분의 답변은 shell또는 사용 관련이 system있습니다. 새 R 콘솔을 열고 원래 콘솔을 닫도록 지시하는 동안 새 콘솔은 이전 콘솔의 응용 프로그램 컨텍스트에서 실행되는 프로세스이기 때문에 작동하지 않습니다. 즉, 새 콘솔이 닫힐 때까지 원래 콘솔을 닫을 수 없습니다. hedgedandlevered와 같은 위의 사용자 중 일부는 원래 콘솔을 닫으면 새 콘솔이 강제로 닫힙니다. 시도하면 새 콘솔이 열리지 만 새 콘솔이 닫힐 때까지 이전 콘솔은 고정 된 상태로 열려 있습니다.

기본 문제는 원래 콘솔에서 새 콘솔로 애플리케이션 컨텍스트를 호출 shell하거나 system변경하지 않으므로 새 콘솔이 닫힐 때까지 원래 프로세스를 종료 할 수 없습니다.

나를 위해 일하는 대안

대신 shell.exec파일 유형에 따라 기본 응용 프로그램에서 파일을 여는 데 일반적으로 사용되는 것을 사용하십시오. .exe에서 사용하면 분명히 실행 파일을 실행합니다. 그러나 중요한 차이점은 시스템이 별도의 컨텍스트에서 응용 프로그램을 시작한다는 것입니다. 그래서 여기 저에게 맞는 코드가 있습니다.

makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)

/bin/x64/Rgui.exeR을 시작하는 데 사용하는 것과 일치 하도록 파일 경로를 편집해야합니다. 이 줄을 .Rprofile파일에 넣은 다음 restart.RR 코드를 입력하여 호출 할 수 있습니다 .

다른 방법에 비해이 방법의 단점은 --no-save그냥 에서처럼 명령 줄 인수를 전달할 수 없다는 것입니다 shell. 그러나 최소한 이렇게하면 원래 R 프로세스를 닫을 수 있습니다.


이에 대한 솔루션을 찾고 후, 나는 내 문제는이 솔루션을 기반으로 해결 여기 는 R 패키지 사용 RDCOMClient을 .
아래 솔루션은 키 누름 ctrl + shift + F10을 시뮬레이션하면 RStudio (Windows) 내에서 작동 합니다.

RDCOMClient 패키지는 다음 명령을 사용하여 설치해야합니다.

install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")

RStudio (Windows 10) 내에서 키 누르기를 시뮬레이션하는 코드는 다음과 같습니다.

library(RDCOMClient) 
wsh <- COMCreate("Wscript.Shell") 
wsh$SendKeys("^+{F10}") 

위 코드의 마지막 줄에서 'ctrl'키는 '^'로 표시되고 Shift 키는 '+'로 표시됩니다. 이 주요 표현에 대한 모든 설명은 여기에서 볼 수 있습니다 .

위 코드의 마지막 줄을 실행 한 직후 @steadyfish 의 의견 에 따라 RStudio의 전체 R 세션이 재설정됩니다 . 즉, 현재 세션에서 모든 데이터를 제거하고 세션에서로드 된 모든 패키지를 언로드합니다.


또 다른 대안으로 Emacs ESS (> = 16.10)는 기본적으로 inferior-ess-r-reload-hook바인딩 된 열등한 R 프로세스를 다시로드 할 수 있습니다 C-c C-e C-r.


Windows에서 동일한 새로 고침 세션 기능이 필요했고 코드의 약간 수정 된 버전으로 끝났습니다.

makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)

Windows에서는 Rprofile.site파일 을 수정해야 합니다. R의 etc디렉토리에 있습니다. 또한 bin/x64시스템 구성에 따라 변경 될 수 있는 경로의 마지막 부분 을주의하십시오. 나는 이것이 다른 사람들에게도 도움이되기를 바랍니다.


나는 옵션에서 현재 작업 디렉토리를 설정함으로써 R의 최상의 사용을 실현한다고 생각합니다. 그런 다음 작업 공간 / 세션 파일이 표시되기 시작하거나 프로젝트 사이에 충분한 작업이있을 때마다 R을 닫은 후 작업 디렉토리에서이 기본 세션 파일의 이름을 바꿀 수 있으며 R / Rstudio는 자동으로 새 파일에서 시작합니다. 현재 작업을 방해하지 않고 작업 영역 / 세션 파일.

R을 종료하고 현재 세션 파일의 이름을 변경해야합니다.

물론 현재 작업을 저장하지 않으려면 원래 개체에서 복사 한 후 개체를 재설정하거나 작업을 수행했는지 확인해야합니다. 항상 이전 작업 공간을로드 할 수 있다는 것을 아는 것은 유혹이지만 그렇지 않은 것보다 더 유용합니다.

간단히 R을 종료하면이 작업 공간이 꽉 찼다는 의미이며, 종료 후 이름을 변경하고 새로운 작업 공간으로 R / Rstudio를 다시 시작하는 동안 약간의 간격이 있습니다. 항상 새 작업 공간에서 선택한 개체를로드 할 수 있습니다. 이상적으로는 모든 중요한 작업이 프로젝트 디렉토리에 있어야하지만 작업 기록이 필요할 때마다 돌아 가야하며 저장된 세션은 더 긴 프로젝트를 수행하면 어느 시점에서 유용하게 사용됩니다. 필요하지 않다면rm(list=ls())

또한 RDComClient@Eduardo Alvin 아이디어가 마음에 들지만 중단되었습니다.

대체 옵션

작업 공간 내에서 언제든지 수하물을 제거하는 간단한 대안은 다음을 사용하는 것입니다. save.image

save.image("Rstreamingscience.data")
quit(save='no')
load("Rstreamingscience.data") ##G:/ADA registers##
save.image("Rstreamingscience.data")

이렇게하면 원하는대로 자유롭게오고 갈 수 있고 필요한 만큼 작업 공간을 열 수 있습니다.


makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)

또는 --save 또는 --no-save

paste0(R.home(),"/bin/i386/R --no-save")

나는 이것이 당신이 새로 고침을 호출하기 전에 setwd ()를 사용했다면 필요한 것이라고 생각합니다 (이것도 원래 버전도 나에게 작동하지 않지만 R을 다시 시작한 다음 스스로 닫히기 때문에 새 창이 열리지 않습니다. 이렇게 해주세요)


다음 기능을 작성했습니다. 생각해 내다! 한 번만 사용할 수 있으며 R 세션이 다시 시작된 후 다시로드해야합니다.

clc <- function() {
  rm(list = ls(envir = globalenv()),envir = globalenv()) #clear Vars from global enviroment
  gc()  #grabage colector
  cat("\014") #clc
  .rs.restartR() #clear session
}

때로는 패키지를 분리하는 것도 도움이됩니다.


Martin Morgan의 사용 아이디어와 일치합니다 .Last(). 이렇게하면 이전에 호출 된 것과 동일한 명령 줄 옵션 집합으로 R이 다시 시작됩니다.

restart_r <- function(status = 0, debug = TRUE) {
  if (debug) message("restart_r(): Customizing .Last() to relaunch R ...")
  assign(".Last", function() {
    args <- commandArgs()
    system2(args[1], args = args[-1])
  }, envir = globalenv())   
  if (debug) message("restart_r(): Quitting current R session and starting a new one ...")
  quit(save = "no", status = status, runLast = TRUE)
}

참고URL : https://stackoverflow.com/questions/6313079/quit-and-restart-a-clean-r-session-from-within-r

반응형