我有一个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位使用有关。我也会谷歌。谢谢你的阅读。
答案 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(list=ls())
source("script.R")