【发布时间】: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,有趣的是,我确实得到了提示。你是使用主动绑定还是函数方式?作为旁注,在这种情况下使用主动绑定是在玩火而且没有必要——我不建议这样做。