我有一个名为的脚本foo.R包含另一个脚本other.R,该脚本位于同一目录中:
#!/usr/bin/env Rscript
message("Hello")
source("other.R")
Run Code Online (Sandbox Code Playgroud)
但我想R发现other.R无论当前的工作目录是什么.
换句话说,foo.R需要知道自己的路径.我怎样才能做到这一点?
我一直在使用R CMD BATCH my_script.R终端来执行R脚本.我现在正处于我想向命令传递一个参数的地步,但是我遇到了一些让它工作的问题.如果我这样做,R CMD BATCH my_script.R blabla则blabla成为输出文件,而不是被解释为正在执行的R脚本可用的参数.
我试过Rscript my_script.R blabla这似乎blabla正确地作为一个参数传递,但后来我没有得到我得到的my_script.Rout输出文件R CMD BATCH(我想要的.Rout文件).虽然我可以调用的输出重定向到Rscript我的选择的文件名,我就不会得到列入方式文件中的R输入命令R CMD BATCH是否在.Rout文件中.
所以,理想情况下,我正在采用一种方法将参数传递给通过该R CMD BATCH方法执行的R脚本,但是Rscript如果有一种方法可以使它生成一个类似的.Rout文件,那么会很满意.
我正在使用Rin 自动化一些webscraping,cron有时我使用R CMD BATCH,有时我使用Rscript.
决定使用哪一个我主要关注,如果我想要的.Rout文件.
但是在SO中读到一些问题的答案(比如这个或者这个)似乎Rscript是首选R CMD BATCH.
所以我的问题是:
除了语法略有不同并且R CMD BATCH保存.Rout文件而不保存文件Rscript这两个事实之外,它们之间的主要区别是什么?
我什么时候应该更喜欢一个?更具体地说,在cron上面提到的工作中,他们中的一个是首选吗?
我还没有使用littler,它是如何从两个不同的Rscript和R CMD BATCH?
与R CMD BATCH默认生成输出文件的类似命令不同,该输出文件包含会导致脚本执行暂停的任何错误消息,我无法找到执行此操作的方法Rscript.我尝试在我的linux shell中使用管道来实现这个目的:
RScript --no-save --no-restore --verbose myRfile.R > outputFile.Rout
Run Code Online (Sandbox Code Playgroud)
但这只会覆盖错误发生之前发生的任何输出,因此该文件outputFile.R不包含任何错误信息.有谁知道如何使用RScript并将其保存到文件中捕获执行R文件时发生的任何错误?
我想使用Rscript以批处理模式运行R文件,但它似乎没有加载我需要的库.我得到的具体错误是:
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
Run Code Online (Sandbox Code Playgroud)
但是我确实有这个包timeSeries,可以从命令行从Rstudio,RGui和R加载它没问题.问题似乎只是在使用Rscript运行脚本时.
我的系统/环境变量配置为:
C:\Program Files\R\R-3.1.0\bin\x64 (Appended to PATH)
R_HOME = C:\Program Files\R\R-3.1.0
R_User = Patrick
Run Code Online (Sandbox Code Playgroud)
我从命令行在RStudio,RGui和R中运行相同版本的R. 我也.Library从这三个来源检查并得到了相同的输出.
如何从命令行运行Rscript与我在R中使用(并已安装)的软件包?
我Rscript script.r在目录所在的Windows命令行中使用Rscript via script.r.
输出Rscript -e print(.Library)是[1] "C:/PROGRA~1/R/R-31~1.0/library"
这与我提到的其他三个选项一致: [1] "C:/PROGRA~1/R/R-31~1.0/library"
但是,如果我把它放在我的脚本中:
print(.libPaths())
library(timeSeries) #This is the package that failed to load
Run Code Online (Sandbox Code Playgroud)
我得到一个输出:
[1] "C:/Program Files/R/R-3.1.0/library"
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
Run Code Online (Sandbox Code Playgroud)
RStudio中的相应调用提供了实际安装包的其他路径: …
刚看到这个:
$ Rscript -e "sessionInfo()['basePkgs']"
$basePkgs
[1] "stats" "graphics" "grDevices" "utils" "datasets" "base"
$ R --vanilla --slave -e "sessionInfo()['basePkgs']"
$basePkgs
[1] "stats" "graphics" "grDevices" "utils" "datasets" "methods"
[7] "base"
Run Code Online (Sandbox Code Playgroud)
该methods程序包似乎在运行时始终可用R,但不是Rscript.我怀疑这是为了获得性能,但除了显而易见之外还有任何实际意义吗?我问的是因为包装的存在与否而引发的一个有趣的错误methods.
我必须开发一个Web界面,允许用户输入一些输入,这些输入将作为参数传递给Rscript并将结果返回给用户.
对于已经完成类似Web界面的人,我有一些问题:
有没有办法Rscript -e在多行中提供代码?
这在香草R中是可能的
R --vanilla <<code
a <- "hello\n"
cat(a)
code
Run Code Online (Sandbox Code Playgroud)
但Rscript根据R版本,我使用两种不同的东西.
# R 3.0.2 gives two ignores
Rscript -e '
quote> a <- 3+3
quote> cat(a, "\n")
quote> '
# ARGUMENT 'cat(a,~+~"' __ignored__
# ARGUMENT '")' __ignored__
Rscript -e 'a <- 3+3;cat(a, "\n")'
# ARGUMENT '")' __ignored__
# R 2.15.3 gives an ignore for the multiline, but it works with semicolons
Rscript -e '
quote> a <- 3+3
quote> cat(a, "\n")
quote> '
# ARGUMENT …Run Code Online (Sandbox Code Playgroud) 我正在使用Rscript运行批处理.我想将消息打印到屏幕上就像bash中的"echo"一样.所以我使用"打印"功能.
问题是打印输出没有进入屏幕.它转到日志文件.有谁知道R中的echo相当于什么?
我需要通过bash shell运行几个脚本,Rscript并且我使用的一些函数需要该函数isGeneric.但是,在这种情况下,流程就像那样(例如):
Error in .getLogLik() : could not
find function "isGeneric"
Calls: main -> dredge -> .getLik -> .getLogLik
Execution halted
Run Code Online (Sandbox Code Playgroud)
这可以如下再现
# in the bash shell
echo "isGeneric('apply')" > /tmp/test.R
Rscript /tmp/test.R
Run Code Online (Sandbox Code Playgroud)
结果:
Error: could not find function "isGeneric"
Execution halted
Run Code Online (Sandbox Code Playgroud)
但是,如果我们打开一个R会话并键入以下内容,它的工作原理如下:
# in the R shell
isGeneric('apply')
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
你知道问题的来源以及如何解决吗?