我从python调用一个非常简单的名为RCode.R的R脚本
args <- commandArgs(TRUE)
print(args)
source(args[1])
setwd("<YOUR PATH>")
output <- head(mtcars, n = n)
write.table(output, "output.txt")使用以下脚本:
import subprocess
pth = "<YOUR PATH>"
subprocess.call(" ".join(["C:/R/R-3.6.0/bin/x64/R.exe", "-f", '"' + pth + '/R Code.R"', "--args",
'"' + pth + '/arguments.txt"',"1>", '"' + pth + '/log.txt"', "2>&1"]))
subprocess.call(" ".join(["C:/R/R-4.0.3/bin/x64/R.exe", "-f", '"' + pth + '/R Code.R"', "--args",
'"' + pth + '/arguments.txt"',"1>", '"' + pth + '/log.txt"', "2>&1"]))其中arguments.txt包含:n <- 10
问题是,当我使用R-4.0.3时,log.txt文件不会生成,我需要转储一个日志文件,因为它在后面的进程中自动查找日志文件。
在CMD (Windows)中执行以下命令时:
C:/R/R-4.0.3/bin/x64/R.exe -f "<YOUR PATH>/R Code.R" --args "<YOUR PATH>/arguments.txt" 1> "<YOUR PATH>/log.txt" 2>&1'它确实工作得很完美,只有当它嵌入到另一个软件中时才是如此。
另外,我尝试了在名称中没有空格,并从根文件夹调用脚本,而不必指定路径。知道它为什么对R-4不起作用吗?*或者更好的是,如何解决它?
谢谢!
帕德:谢谢你,马丁,你的建议,让我提出了一个更好的问题。
发布于 2021-01-29 14:54:30
帮人解决了这个问题谢谢邓肯·默多克!
解决方案1:
import os
pth = "<YOUR PATH>"
os.system(" ".join(["C:/R/R-4.0.3/bin/x64/R.exe", "-f", '"' + pth + '/RCode.R"', "--args",
'"' + pth + '/arguments.txt"',"1>", '"' + pth + '/log.txt"']))解决方案2:
import subprocess
pth = "<YOUR PATH>"
subprocess.call(" ".join(["1>", '"' + pth + '/log.txt"', "2>&1",
"C:/R/R-4.0.3/bin/x64/R.exe", "-f", '"' + pth + '/RCode.R"', "--args",
'"' + pth + '/arguments.txt"']), shell = True)发布于 2021-01-26 11:33:44
在一种情况下(3.6.0)使用R.exe,在另一种情况下使用(4.0.3) Rscript.exe。R和Rscript都存在了很长一段时间,它们的行为总是略有不同。
你真的不应该把它们混淆在一起(即使在Windows上,我知道,它们看起来像同一个文件。)他们的行为不一样)。
好的,现在两种方法都使用R.exe。为了找出更多/看更多的问题可能发生的地方,你能试一下
使用最小可复制示例的setwd(.))
"<YOUR PATH>" (也不使用带有' ' (空格)的文件名),例如,使用来自“终端”/shell的最后但并非最不重要的一点是:是的,对于R4.0.0,使用了一个完全更新的工具集("brandnew“,例如更新得多的C编译器)来构建Rtools、”RTools4.0“或rtools40:https://cran.r-project.org/bin/windows/Rtools/。因此,人们预计会发生变化,但通常情况下,变化只会变得更好,而不是更糟。
https://stackoverflow.com/questions/65887485
复制相似问题