繁体   English   中英

脚本从R运行,但不通过命令行运行

[英]Script runs from R, but not via command line

我有一个R脚本,可以在R和R Studio中完美运行。 它包括使用RODBC程序包,在该程序包中,我正在连接到Oracle数据库以获取一些数据。

我在R Studio内完美地编写了整个程序。 通过键入以下命令,我也可以直接从R控制台直接运行它:

source("C:/Users/yadda.yadda/script.R")

这意味着它可以获取我所有的连接信息并通过RODBC连接到Oracle,而无需我提供任何帮助。

我想做的下一步是将其设置为以预定的时间间隔定期运行。 为此,我编写了一个包含内容的小蝙蝠文件:

C:\R\R-2.15.2\bin\Rscript.exe "C:\Users\yadda.yadda\script.R"
PAUSE

当我运行bat文件时,它会从脚本中打印出初始的“ print”语句,但会失败,并显示“第一个参数不是打开的RODBC通道”。 完整的输出如下:

C:\Users\yadda.yadda\schedule>C:\R\R-2.15.2\bin\Rscript.exe "C:\Users\yadda.yadda\script.R"
[1]
Housekeeping
Loading required files
Loading the function
Calling the function...
Loading required package: RODBC
Error in sqlQuery(channelMflib, the.SQL) :
first argument is not an open RODBC channel
Calls: get.all.areas -> oceans.get.data -> sqlQuery
Execution halted

C:\Users\yadda.yadda\schedule>PAUSE
Press any key to continue . . .

我一直在努力搜寻,无法弄清楚。 我能够运行不包含RODBC连接的更简单的R脚本,因此我知道bat文件的语法很好。

如果无法解决问题,我将考虑使用ROracle(而不是RODBC)进行尝试,但是由于周围没有其他人使用ROracle,因此与我的同事几乎没有那么灵活/可互换。

感谢您的见解! 麦克风

编辑

nograpes要求提供准系统版本的script.R。 我已经创建了一个,但是这样做可能会产生更多信息。

script.R是:

print("starting")
require(RODBC)
print("loaded RODBC")
channel<-odbcConnect(thedsn,username,password) 
the.SQL <-paste("SELECT * from dual;",sep="")
df<-sqlQuery(channel,the.SQL)
print("done, data to follow")
print(df)

使用上面的输出是:

[1] "starting"
Loading required package: RODBC
Warning message:
package 'RODBC' was built under R version 2.15.3
[1] "loaded RODBC"
Warning messages:
1: In odbcDriverConnect("DSN=thedsn;UID=username;PWD=password") :
[RODBC] ERROR: state IM014, code 0, message [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application
2: In odbcDriverConnect("DSN=thedsn;UID=username;PWD=password") :
ODBC connection failed
Error in sqlQuery(channel, the.SQL) :
first argument is not an open RODBC channel
Execution halted

显然,我已经更改了用户名和密码,但是我知道我使用的用户名和密码,并且能够让脚本打印出正在使用的内容并确认它们正常。

我之前从未见过“架构不匹配”,因此我也将在Google上进行搜索。 作为记录,我一直在使用64位R-我想知道是否可以强迫它使用32位以查看是否有区别, 我想我一直在使用32位R,所以我看看是否可以强制它使用64位-我似乎记得读过,不匹配错误与RODBC的32/64位使用有关。 我也会用Google搜寻。 谢谢阅读。

好的-我知道了-我修改了批处理文件以强制其使用64位R,并且可以正常工作。

代替

C:\R\R-2.15.2\bin\Rscript.exe

我用了:

C:\R\R-2.15.2\bin\x64\Rscript.exe

而且有效。

感谢您的提示,这给了我更多信息。

真高兴你做到了。 对于因有类似问题而阅读此消息的人们,要记住的一件事可能是在使用rm()命令进行测试运行之前清除变量,

rm(list=ls())
source("script.R")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM