1

好的 - 这就是我想要做的。

我有这个受密码保护的 CSV 文件,我正在尝试将其导入 R。

我可以使用以下方法很好地导入它:

读取.csv()

当我在 RStudio 中运行我的代码时,一切都很完美。

但是,当我尝试使用批处理文件(windows .bat)运行我的 .R 文件时,它不起作用。我想使用 .BAT 文件,这样我就可以设置一个计划任务来每天早上运行我的代码。

这是我的 .BAT 文件:

"E:\R-3.0.2\bin\x64\R.exe" CMD 批处理 "E:\Control Files\download_data.R" "E:\Control Files\DailyEmail.txt"

这是我的 .R 文件:

url <- " http://用户名:password@www.url.csv "

数据 <- read.csv(url, skip=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 中完全相同的错误消息。所以我怀疑这可能是我在哪里获取数据的问题?提供者是否可以阻止来自命令行的数据,而不是来自 Rstudio 的数据?

4

2 回答 2

0

所以,我找到了一个解决方案,这对大多数人来说可能不是最实用的,但对我有用。

我所做的是将我的项目迁移到 Linux 系统。无论如何,在 Linux 上运行日常脚本更容易。

该解决方案利用了 linux 中的“wget”函数。

您可以直接在 shell 脚本中运行 wget,也可以使用 R 中的 system() 函数来运行 wget。

代码如下:

wget -O /home/user/.../file.csv --user=userid --password='password' http://www.url.com/file.csv

您可以执行以下操作:

syscomand >- "wget -O /home/.../file.csv --user=userid --password='password' http://www.url.com/file.csv "

系统(系统命令)

在 R 中将 CSV 下载到硬盘上的某个位置,然后使用 read.csv() 获取 CSV

这样做让我对问题的潜在根本原因有了更深入的了解。在系统(syscommand)运行时,我得到以下输出:

正在连接到 www.website.com (www.website.com)|ip.ad.re.ss|:80... 已连接。

已发送 HTTP 请求,等待响应... 401 Unauthorized

重用与 www.weburl.com:80 的现有连接。

HTTP 请求已发送,等待响应... 200 OK

不知道为什么它必须发送两次请求?为什么我第一次尝试就得到 401 Unauthorized?

于 2013-11-07T21:18:36.853 回答
0

我遇到过与文件权限有关的类似问题。.bat 文件不知何故没有与您直接从 Rstudio 运行代码相同的权限。尝试在 .bat 文件中使用 rscript ( http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html )

Rscript "E:\Control Files\download_data.R"

参数“E:\Control Files\DailyEmail.txt”的目的是什么?该程序是否应该以任何方式使用它?

于 2013-11-04T19:54:23.857 回答