从Rscript.exe调用R脚本故障排除

时间:2015-12-18 02:47:46

标签: r

我有一个在RStudio中运行良好的R脚本。我正在尝试安排它使用RScript.exe在Windows任务计划程序中定期运行。它失败了。

然后我尝试从命令行运行它并注意到下面的错误。

D:\development\projects\SSCDAPOC\trunk\src\scripts>"C:\Program Files\R\R-3.2.2\bin\x64\Rscript.exe" batch_read_rss_selected.R
Loading required package: xml2
Error in as.vector(x, "list") :
  cannot coerce type 'environment' to vector of type 'list'
Calls: do.call ... <Anonymous> -> lapply -> as.list -> as.list.default
Execution halted

当我直接在RStudio中获取相同的脚本时,它工作得很好。

有关我如何调查和解决此问题的任何提示?

以下是使用时的R会话信息:

> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_Singapore.1252  LC_CTYPE=English_Singapore.1252   
[3] LC_MONETARY=English_Singapore.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Singapore.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] rvest_0.3.1 xml2_0.1.2 

loaded via a namespace (and not attached):
 [1] httr_1.0.0    selectr_0.2-3 R6_2.1.1      magrittr_1.5  tools_3.2.2   curl_0.9.4   
 [7] Rcpp_0.12.2   stringi_1.0-1 stringr_1.0.0 XML_3.98-1.3 

2 个答案:

答案 0 :(得分:3)

经过一些进一步的搜索后,我找到了两种方法来完成这项工作:

  1. 我强制输入R.exe,而不是使用Rscript.exe。即代替 Rscript.exe batch_read_rss_selected.R之前,我使用了R.exe -f batch_read_rss_selected.R。这很有用,并且还在屏幕上的脚本中抛出了每一行代码。
  2. 更改脚本以明确包含library(methods)。从R内部(在我的情况下是RStudio IDE)中运行时,脚本似乎不需要这样做,但是我的脚本需要Rscript.exe。现在它在命令行和R环境中都执行类似的操作。

答案 1 :(得分:0)

我使用 cmd 在 Task Scheduler 中调用 Rscript.exe,然后给它一个到我的 R 脚本的绝对路径,它进一步定义了到 rmarkdown 文件的输出。我应该注意到,我还必须在我的计算机上安装 pandoc 才能使其工作 (https://pandoc.org/installing.html)。但我现在有一个每天运行的 rmarkdown 报告,它直接从 MSAccess 数据库中提取数据,为我提供一份摘要,我可以发送给我的老板和员工。

代码:

program/script = cmd
additional argument =
/c C:/<yourpath>/Rscript.exe "C:/<yourpath>/run_report.R"

在 run_report.R 中我指定输出:

rmarkdown::render("C:/<yourpath>/filename.Rmd", output_format= NULL,output_file="C:/yourpath>/filename.pdf", knit_root_dir=NULL, runtime="auto",  clean=TRUE, run_pandoc = TRUE, quiet=TRUE)