R 내에서 별칭을 만들어 실행 q()
한 다음 깨끗한 R 세션을 다시 시작할 수있는 방법이 있습니까?
그리고 예, 입력하기에는 너무 게으른 q()
다음 편지 R
:)
R 내에서 별칭을 만들어 실행 q()
한 다음 깨끗한 R 세션을 다시 시작할 수있는 방법이 있습니까?
그리고 예, 입력하기에는 너무 게으른 q()
다음 편지 R
:)
save
매개 변수 를 추가하는 것 입니다. 그런 다음 R을 다시 시작하는 새 함수에 별칭을 할당 할 수 있습니다.q()
"r"
q("r")
답변:
RStudio를 사용하는 경우 : command / ctrl + shift + F10
당신은 또한 사용할 수 있습니다
.rs.restartR()
.rs.restartR()
내 컴퓨터에서 이러한 작업을 수행하지 않는 것 같습니다.
R을 시작하는 방법에 따라 다음 줄 중 하나를 .Rprofile
파일에 배치 하십시오.
makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv)
makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)
그런 다음 R 콘솔에 입력하십시오.
refresh
현재 세션을 종료하고 새 세션을 시작합니다.
.Last <- function() system("R")
종료주기의 후반에 reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
. 그런 다음 q()
계속 돌아옵니다.
.rs.restartR ()이 ctrl + shift + F10을 누르는 것과 유사하게 작동한다는 것을 알았습니다. 그러나 패키지를 언로드하지 마십시오
getAnywhere(".rs.restartR")
그것 에서 인 것 같습니다 tools:rstudio
. 순수한 R 세션에서 액세스 할 운이 없었습니다.
.rs.restartR()
패키지를 언로드하지 않으므로 정확히 동일 하지 않습니다ctrl+shift+f10
이전 게시물이지만 답변이 제대로 작동하지 않으므로 (저는 Windows를 사용하고 다른 사용자를 테스트하지 않았습니다) 솔루션을 추가하겠습니다. 내 용어 중 일부는 여기에서 벗어날 수 있지만 요점은 다음과 같습니다.
위의 답변은 제대로 작동하지 않습니다.
여기에 제출 된 대부분의 답변 은 새 R 콘솔을 열고 원래 콘솔을 닫도록 지시하는 동안 새 콘솔이 이전 콘솔의 애플리케이션 컨텍스트에서 실행되는 프로세스이기 때문에 shell
또는 사용 system
과 관련이 있습니다. 즉, 새 콘솔이 닫힐 때까지 원래 콘솔을 닫을 수 없습니다. 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.exe
R을 시작하는 데 사용하는 것과 일치 하도록 파일 경로를 편집해야합니다. 이 줄을 .Rprofile
파일에 넣은 다음 restart.R
R 코드를 입력하여 호출 할 수 있습니다 .
다른 방법에 비해이 방법의 단점은 --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 세션이 재설정됩니다 . 즉, 현재 세션에서 모든 데이터를 제거하고 세션에서로드 된 모든 패키지를 언로드합니다.
Windows에서 동일한 새로 고침 세션 기능이 필요했고 코드의 약간 수정 된 버전으로 끝났습니다.
makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)
Windows에서는 Rprofile.site
파일 을 수정해야 합니다. R의 etc
디렉토리에 있습니다. 또한 bin/x64
시스템 구성에 따라 변경 될 수 있는 경로의 마지막 부분 을주의하십시오. 나는 이것이 다른 사람들에게도 도움이되기를 바랍니다.
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)
}
나는 옵션에서 현재 작업 디렉토리를 설정함으로써 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 ()를 사용했다면 필요한 것이라고 생각한다. 이렇게 해주세요)
rm(list=ls())
있지만 그게 의미하는 바가 아닙니까?