2013-03-27 622 views
24

我想从R内使用system2()调用一个简单的python脚本。我读过一些我发现含糊不清的信息,说如果使用了“太多”的内存,它将无法工作。在Rstudio内重新启动R

如果我加载一个大型数据集并使用其中的某些信息作为参数传递到system2(),它只有在我手动点击调用Rstudio中的“Restart 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中不适用于我,它称之为“系统”(在这种情况下,它表现出与“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”是否有点神秘。任何人都可以指向正确的方向吗?

+0

你确定你确实需要重新启动整个R吗?如果使用'rm(list = ls())'来清理工作区,并且可能使用'gc()'手动垃圾收集以防万一,这应该足够了? – 2013-03-27 19:09:54

+0

@BenHunter它会立即关闭RStudio,因为您在重新启动后调用'q'。取出呼叫到'q',它应该与在RStudio中选择重新启动R完全一样。 – 2013-03-27 19:42:53

+0

@Hemmo,我知道这是一个选项,在这种情况下,它可能是一个不错的选择,但我真的想知道如何解决这个问题,而不会丢失我的工作空间(或保存,删除,然后重新加载它)。 – 2013-03-27 22:00:24

回答

0

您是否试过在t中嵌入函数调用他应用函数,而不是for循环?

我已经有一些代码运行系统的内存在for循环运行完美的应用程序与完美。它可能有帮助吗?

39

在Rstudio,您可以通过重新启动R对话:

command/ctrl + shift + F10 

您还可以使用:

.rs.restartR() 
+1

这并没有回答这个问题,因为它似乎他们想要一个命令行 – Arthur 2016-02-01 14:42:55

5

RStudio有这个无证rs.restartR()这是应该能够做到这一点:重新启动R.

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

+0

它释放了以前用过的所有内存,后来被释放,所以它做了一些事情(在某些情况下非常有用)。 – 2017-08-04 21:59:03