【问题标题】:Restart R within Rstudio在 Rstudio 中重新启动 R
【发布时间】:2013-03-18 00:05: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)
}

This answer 没有得到我想要的。也就是说,它在 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”有点神秘。谁能指出我正确的方向?

【问题讨论】:

  • 你确定你真的需要重启整个R吗?如果您使用清理工作区的rm(list=ls()),并可能使用gc() 进行手动垃圾收集以防万一,这就足够了?
  • @BenHunter 它正在立即关闭 RStudio,因为您在重新启动后调用了 q。拨打q,它应该与在RStudio中选择Restart R完全相同。
  • @Hemmo,我知道这是一个选项,在这种情况下,它可能是一个不错的选择,但我真的很想知道如何解决这个问题,而不会丢失我的工作空间(或保存,删除,然后重新加载)。
  • @Matthew Plourde,这几乎可以工作,但 Rstudio 只是重新加载并且没有给我提示。具体来说,所有启动活动都会再次运行,我可以看到我的 Rprofile 中的包被加载,但我没有看到“>”提示。
  • @BenHunter,有趣的是,我确实得到了提示。你是使用主动绑定还是函数方式?作为旁注,在这种情况下使用主动绑定是在玩火而且没有必要——我不建议这样做。

标签: r rstudio


【解决方案1】:

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

command/ctrl + shift + F10 

你也可以使用:

.rs.restartR()

【讨论】:

  • 这没有回答问题,因为他们似乎想要一个命令行
【解决方案2】:

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

但是,它不会卸载已经加载的包,也不会清理环境,所以我对它是否会重新启动R有些怀疑。

【讨论】:

  • 它确实释放了曾经用完的所有内存,但后来又被释放了......所以它确实做了一些事情(在某些情况下非常有用)。
  • 确实对我的用例非常有用:我经常使用 read.xlsx 读取共享驱动器上受密码保护的 excel 文件,这会使 excel 文件变为只读。然后我可以运行上面的行,以防止这种只读后果。因此,我团队的其他成员可以愉快地保存对我的工作不重要的任何编辑。
【解决方案3】:

如果您使用 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。

【讨论】:

    【解决方案4】:

    您是否尝试过将函数调用嵌入到 apply 函数中,而不是 for 循环中?

    我有一些代码在 for 循环中运行系统内存不足,与 apply 完美运行。可能有帮助?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2018-04-09
      • 2016-06-29
      • 2021-10-10
      相关资源
      最近更新 更多