如何防止在Linux上调用system2()时Rscript挂起?
我正在使用Ubuntu 16.04并运行R3.3.1,我编写了以下简单的Rscript文件来演示我遇到的问题: testR.R:如何防止在Linux上调用system2()时Rscript挂起?,r,linux,parallel-processing,ubuntu-16.04,rscript,R,Linux,Parallel Processing,Ubuntu 16.04,Rscript,我正在使用Ubuntu 16.04并运行R3.3.1,我编写了以下简单的Rscript文件来演示我遇到的问题: testR.R: name<- commandArgs(trailingOnly = TRUE)[1] for(i in 1:20000000){ if(i %% 1000000 == 0){ print(paste("hello",name,i)) } } print(paste("goodbye", name)) 我使用Rscript testCallTo
name<- commandArgs(trailingOnly = TRUE)[1]
for(i in 1:20000000){
if(i %% 1000000 == 0){
print(paste("hello",name,i))
}
}
print(paste("goodbye", name))
我使用Rscript testCallTo.R
从终端运行此命令,输出的结尾如下所示:
[1] "hello james 20000000"
[1] "goodbye james"
[1] "hello sally 20000000"
[1] "goodbye sally"
[1] "hello david 20000000"
[1] "goodbye david"
[1] "hello john 20000000"
[1] "goodbye john"
它似乎永远不会完全终止,并且在使用Ctrl-C之前不会重新出现提示。这不会有太大问题,只是在挂起时,它会定期在/tmp目录中创建空文件,直到使用Ctrl-C时才会停止。这是一个问题,因为我想长时间运行具有类似结构的脚本,如果我让它在无人值守的情况下运行,它会膨胀/tmp,然后需要几个小时才能重新启动
更奇怪的是,生成的文件似乎从文件夹GUI中被锁定,阻止我删除它们,并且即使使用ls-A
,终端也不可见,如下面的屏幕截图所示。如果我试图用rm
和文件名从终端删除它,它会抛出“文件不存在”错误
此结构的要点是并行运行多个Rscript,并根据另一个Rscript确定的参数传递给它们。我的直觉告诉我,我试图这样做的方式是导致这个问题的原因,必须有更好的方式
我无法重现您的问题,对我来说效果很好。(然而,在ubuntu-14.04.5上进行了测试,所以是“盐粒”。)我不认为我用RStudio编写脚本会有什么不同,而是从终端运行它?我无法想象这有什么关系,但除此之外,对于ubuntu版本,我不知道为什么其他人不会看到这个问题,我已经在同一个设置中的两台不同的机器上得到了它。这些文件只是简单的文本文件,所以使用rstudio编辑器应该没有什么区别。您的
~/.Rprofile
文件中是否有任何相关内容正在改变R的行为?我无法重现您的问题,对我来说效果很好。(然而,在ubuntu-14.04.5上进行了测试,所以是“盐粒”。)我不认为我用RStudio编写脚本会有什么不同,而是从终端运行它?我无法想象这有什么关系,但除此之外,对于ubuntu版本,我不知道为什么其他人不会看到这个问题,我已经在同一个设置中的两台不同的机器上得到了它。这些文件只是简单的文本文件,所以使用rstudio编辑器应该没有什么区别。您的~/.Rprofile
文件中是否有任何改变R行为的相关内容?
[1] "hello james 20000000"
[1] "goodbye james"
[1] "hello sally 20000000"
[1] "goodbye sally"
[1] "hello david 20000000"
[1] "goodbye david"
[1] "hello john 20000000"
[1] "goodbye john"