2013-11-04 48 views
1

好吧 - 這就是我想要做的。R導入 - 來自密碼保護的URL的CSV文件 - 在.BAT文件中

我有細使用此密碼保護的CSV文件,我想導入R.

我可以將其導入:

read.csv()

當我在RStudio中運行我的代碼時,一切都很完美。

但是,當我嘗試使用批處理文件(Windows.bat)運行我的.R文件時,它不起作用。我想使用.BAT文件,以便我可以設置一個計劃任務來每天早上運行我的代碼。

這裏是我的.bat文件:

「E:\ R-3.0.2 \ BIN \ 64 \運行R.exe」 CMD一批 「E:\控制文件\ download_data.R」「E :\控制文件\ DailyEmail.txt」

這裏是我的.R文件:

網址< - 「http://username:[email protected]

個數據< - read.csv(URL,跳過= 1)

**注意,我已經把我的用戶名/密碼和CSV的在我的代碼的確切位置。我在這裏使用了通用的東西,因爲這是與工作有關的,並且發佈用戶名和密碼可能會被忽略。

正如我所說,當我在RStudio中使用它時,此代碼正常工作。但是當我使用.BAT文件時失敗。

我收到以下錯誤信息:

錯誤download.file(URL, 「E:/data/data.csv」): 無法打開URL 'websiteurl' 另外:警告消息: 在download.file(URL, 「E:/data/data.csv」): 無法解決 '用戶名' 執行暫停

**上面的websiteurl是上面的http(我不能發佈鏈接) 很明顯,.BAT遇到了用戶名/密碼問題?有什麼想法嗎?

*編輯*

只要嘗試這種在Linux上我已經走了。想着也許windows正在玩傻佬。

就在終端上,我運行Rscript -e「download_data.r」,並得到與我在Windows中一樣的EXACT相同的錯誤消息。所以我懷疑這可能是我獲取數據的地方的問題?該提供者可以阻止來自命令行的數據,但不能阻止來自Rstudio的數據?

回答

0

所以,我找到了一個解決方案,這對大多數人來說可能不是最實用的,但對我來說很有用。

我所做的是將我的項目遷移到Linux系統。無論如何,運行日常腳本在Linux上更容易。

該解決方案利用了Linux中的「wget」功能。

您既可以在shell腳本中運行wget右鍵,也可以使用R中的system()函數運行wget。

代碼如下所示:

的wget -O /home/user/.../file.csv --user =用戶ID = - 密碼 '密碼' http://www.url.com/file.csv

你可以這樣做:

syscomand> - 「的wget -O /home/.../file.csv --user =用戶ID = - 密碼 '密碼' http://www.url.com/file.csv

系統(syscommand)

R中

到CSV下載到的位置在硬盤上,然後用read.csv()

這樣做,這樣給了我一些更深入地瞭解搶CSV這是問題的潛在根本原因。在系統(syscommand)運行時,我得到以下輸出:

連接到www.website.com(www.website.com)| ip.ad.re.ss |:80 ...連接。

HTTP請求發送的,在等待響應... 401未授權

重用現有的連接www.weburl.com:80。

發送HTTP請求,正在等待迴應... 200 OK

不知道爲什麼它有兩次發送請求?爲什麼我第一次嘗試401未授權? 30。

+0

Thanks.Can你讓我知道我必須使用哪個命令而不是wget&system for windows? – alily

0

我有類似的問題,必須與文件權限。不知何故,.bat文件不具有與直接從Rstudio運行代碼相同的權限。試試你的.bat文件中使用RSCRIPT(http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html)像

RSCRIPT 「E:\控制文件\ download_data.R」

什麼參數的宗旨,以 「E:\控制文件\ DailyEmail.txt」 ?程序是否設想以任何方式使用它?

+0

Ya。它有助於處理錯誤/消息。沒有它,腳本在遇到來自R的錯誤/消息時停止。 有了它,它將獲取所有錯誤/消息並將它們轉儲到該.txt文件中。 我相信還有其他方法可以處理這個問題,但它是第一個工作的。 – imgschatz