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

时间:2013-11-21 17:04:32

标签: r oracle rodbc

我有一个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要求提供一个准确的脚本版本.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

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

之前我没有看过“架构不匹配”,所以我也会谷歌那样。 为了记录,我一直在使用64位R - 我想知道我是否可以强制它使用32位来查看是否有所区别我想我一直在使用32位R,所以我会看看我是否可以强迫它使用64位 - 我似乎记得读到错配错误与RODBC的32/64位使用有关。我也会谷歌。谢谢你的阅读。

2 个答案:

答案 0 :(得分:3)

好吧 - 我知道了 - 我修改了我的批处理文件以强制它使用64位R,它起作用了。

而不是

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

我用过:

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

它有效。

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

答案 1 :(得分:0)

很高兴你得到了它的工作。对于阅读此消息的人,因为他们有类似的问题,可以记住的一件事是在测试运行之前使用rm()命令清除变量,

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