mgo*_*ser 68
如果你在RStudio:command/ctrl + shift + F10
你也可以使用
.rs.restartR()
Run Code Online (Sandbox Code Playgroud)
G. *_*eck 55
根据您的启动方式R尝试将其中一行放入您的.Rprofile文件中:
makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv)
makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)
然后将其输入R控制台:
refresh
Run Code Online (Sandbox Code Playgroud)
将关闭当前会话并启动一个新会话.
我发现.rs.restartR()就像按下ctrl + shift + F10一样.
小智 6
在寻找解决方案后,我使用 R 包RDCOMClient基于此解决方案解决了我的问题。一旦模拟按键 ctrl+shift+F10 ,下面的解决方案就可以在 RStudio (Windows) 中工作。
必须使用以下命令安装 RDCOMClient 软件包:
install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")
Run Code Online (Sandbox Code Playgroud)
在 RStudio (Windows 10) 中模拟按键的代码是:
library(RDCOMClient)
wsh <- COMCreate("Wscript.Shell")
wsh$SendKeys("^+{F10}")
Run Code Online (Sandbox Code Playgroud)
在上面代码的最后一行中,“ctrl”键由“^”表示,Shift 键由“+”表示。有关此关键表示的所有解释均可在此处找到。
根据@steadyfish的评论,运行上面代码的最后一行后,RStudio 中的整个 R 会话将被重置。也就是说,它会删除当前会话中的所有数据并卸载会话中所有已加载的包。
旧帖子,但没有一个答案很有效(对我来说,我使用的是 Windows,还没有测试其他人),所以我会添加我的解决方案。我的一些术语可能不在这里,但这应该能说明问题:
以上答案不太有效
此处提交的大多数答案都涉及使用shell或system不太有效,因为当它们打开新的 R 控制台并指示原始控制台关闭时,新控制台是在旧控制台的应用程序上下文中运行的进程。这意味着在新控制台关闭之前,原始控制台无法关闭。上面的一些用户如hedgedandlevered 报告说,关闭原始控制台会强制关闭新控制台。当我尝试时,新控制台确实打开了,但旧控制台保持打开并处于冻结状态,直到新控制台关闭。
基本问题是调用shell或system不将应用程序上下文从原始控制台更改为新控制台,因此在新控制台关闭之前,原始进程无法终止。
对我有用的替代方案
而是使用shell.execwhich 通常用于根据文件类型在默认应用程序中打开文件。显然,当在 .exe 上使用时,它会运行可执行文件。但是,重要的区别是系统在它自己单独的上下文中启动应用程序。所以这是对我有用的代码:
makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)
您需要编辑文件路径/bin/x64/Rgui.exe以匹配您用于启动 R 的任何内容。您只需将此行放在您的.Rprofile文件中,然后您就可以通过输入restart.R您的 R 代码来调用它。
与其他方法相比,这种方法的缺点是您不能像使用--no-save那样传递命令行参数shell,但至少这可以让您关闭原始 R 进程。
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)
或使用 --save 或 --no-save
paste0(R.home(),"/bin/i386/R --no-save")
Run Code Online (Sandbox Code Playgroud)
我认为如果您在调用刷新之前使用了 setwd() ,那么这就是您所需要的(尽管这个版本和原始版本都不适合我,因为它重新启动 R 然后自行关闭,永远不会打开一个新窗口。如果有人可以评论这个,请这样做)
| 归档时间: |
|
| 查看次数: |
64291 次 |
| 最近记录: |