39

我正在尝试使用 system2() 从 R 中调用一个简单的 python 脚本。我已经阅读了一些我发现含糊不清的信息,即如果使用了“太多”内存,它将无法正常工作。

如果我加载一个大型数据集并使用其中的一些信息作为参数传递给 system2(),那么只有在调用 Rstudio 中手动单击“重新启动 R”时它才会起作用。

我想要的是:

df <- read.csv('some_large_file.csv')
###extracting some info called 'args_vec'
for(arg in args_vec){
    system2('python', args)
}

这不会按原样工作。for 循环被简单地传递了。

我需要的:

df <- read.csv('some_large_file.csv')
###extracting some info called 'args_vec'
###something that 'restarts' R
for(arg in args_vec){
    system2('python', args)
}

这个答案并没有得到我想要的。也就是说,它在 Rstudio 中对我不起作用,它调用“system”(在这种情况下与“system2”存在相同的问题)。事实上,当我将上面引用的答案放在我的 Rprofile.site 文件中时,它只是立即关闭了 rstudio:

我将该建议作为正常功能尝试(而不是使用“makeActiveBinding”,但效果不佳。

##restart R in r session  -- doesn't work
makeActiveBinding("refresh", function() { system("R --save"); q("no") }, .GlobalEnv)

##nor did this:
refresh <- function() { system("R --save"); q("no") }

我尝试了上面这两个选项的多种变体,但这对于一个简单的问题来说已经很长了。关于启动过程我还有很多不明白的地方,“makeActiveBinding”有点神秘。谁能指出我正确的方向?

4

4 回答 4

80

在 Rstudio 中,您可以通过以下方式重新启动 R 会话:

command/ctrl + shift + F10 

您还可以使用:

.rs.restartR()
于 2014-09-09T14:53:53.300 回答
13

RStudio 有这个未记录的文件rs.restartR(),它应该这样做:重新启动 R。

但是,它不会卸载已加载的包,也不会清理环境,因此我怀疑它是否会重新启动 R。

于 2016-02-01T14:45:19.487 回答
1

如果您使用 RStudio,请使用菜单项 Session > Restart R 或相关的键盘快捷键Ctrl+Shift+F10(Windows 和 Linux)或Command+Shift+F10(Mac OS)。额外的键盘快捷键使您可以轻松地从中断的地方重新开始开发,即说“重新运行所有代码到这里”:

在 R 脚本中,使用Ctrl+Alt+B(Windows 和 Linux) 或Command+Option+B(Mac OS) 在 R markdown 中,使用Ctrl+Alt+P(Windows 和 Linux) 或Command+Option+P(Mac OS) 如果从 shell 运行 R,请使用Ctrl+Dq()退出,然后重新启动 R。

于 2019-12-19T19:15:36.237 回答
0

Have you tried embedding the function call within the apply function, rather than a for loop?

I've had some pieces of code that ran the system out of memory in a for loop run perfectly with apply. It might help?

于 2014-04-14T13:01:14.430 回答