簡體   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