从R内退出并重新启动一个干净的R会话?
有没有一种方法,我可以在R中做一个别名,将执行q()
和重新启动一个干净的R会话?
是的,我懒得键入q()
然后字母R
🙂
根据您如何开始R,请尝试将以下其中一行放入.Rprofile
文件中:
makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv) makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)
然后进入R控制台:
refresh
将closures当前会话并启动一个新的会话。
如果你在RStudio中:command / ctrl + shift + F10
你也可以使用
.rs.restartR()
我发现.rs.restartR()的工作原理与按Ctrl + Shift + F10一样。
我需要在Windows上的相同的刷新会话function,我最后修改了一些代码:
makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)
在Windows上,您需要修改Rprofile.site
文件。 它在R的etc
目录下。 还要注意bin/x64
可以根据您的系统configuration更改path的最后部分。 我希望这也能帮助别人。
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)
或者用 – 保存或者 – 保存
paste0(R.home(),"/bin/i386/R --no-save")
如果你在调用刷新之前使用了setwd(),那么我认为这是你需要的(虽然这个和原始版本都不适用于我,因为它重新启动R然后自动closures,一个新的窗口永远不会打开。这个,请这样做)
我写了下面的函数。 记得! 您只能使用一次,然后在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 }
有时分离一个包也有帮助。
符合马丁·摩根的使用.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) }
旧的post,但没有一个答案很有效(对我来说,我使用Windows,没有testing其他人),所以我会添加我的解决scheme。 我的一些术语可能会在这里,但是这应该得到重点:
上面的答案不太有效
这里提交的大多数答案都涉及到使用shell
或者system
,因为当它们打开一个新的R控制台并且指示原来的控制台closures时,新控制台是一个运行在旧控制台应用程序上下文中的进程。 这意味着直到新的控制台closures,原来的控制台才能closures。 上述一些用户(例如hedged andlevered)报告说,closures原始控制台会强制closures新的控制台。 当我尝试,新的控制台打开,但旧的控制台保持打开冻结状态,直到新的控制台closures。
基本问题是调用shell
或system
不会将应用程序上下文从原始控制台更改为新的控制台,因此原始进程无法终止,直到新的控制台closures。
替代scheme适合我
而是使用通常用于在基于文件types的默认应用程序中打开文件的shell.exec
。 在.exe上使用时,显然,它运行可执行文件。 但是,重要的区别在于,系统在自己的独立上下文中启动应用程序。 所以这里是适合我的代码:
makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)
您需要编辑文件path/bin/x64/Rgui.exe
以匹配您用来启动R的任何文件。您只需将该行放在.Rprofile
文件中,然后在R中input.Rprofile
即可调用该文件码。
与其他方法相比,这个方法的缺点是你不能像shell
那样传递像--no-save
这样的命令行参数,但至less可以让你closures原来的R进程。