[英]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.