好的 - 所以这就是我想要做的。
我有这个受密码保护的CSV文件我正试图导入R.
我可以使用以下方法将其导入:
read.csv()
当我在RStudio中运行我的代码时,一切都很完美。
但是,当我尝试使用批处理文件(windows .bat)运行我的.R文件时,它不起作用。我想使用.BAT文件,这样我就可以设置一个计划任务来每天早上运行我的代码。
这是我的.BAT文件:
“E:\ R-3.0.2 \ bin \ x64 \ R.exe”CMD BATCH“E:\ Control Files \ download_data.R”“E:\ Control Files \ DailyEmail.txt”
这是我的.R文件:
url< - “http://username:password@www.url.csv”
data< - read.csv(url,skip = 1)
**请注意,我已将我的用户名/密码以及CSV的确切位置放在我的代码中。我在这里使用了通用的东西,因为这是与工作相关的,并且发布用户名和密码可能不受欢迎。
正如我所说,当我在RStudio中使用它时,这段代码工作正常。但是当我使用.BAT文件时失败了。
我收到以下错误消息:
download.file中的错误(url,“E:/data/data.csv”): 无法打开网址“ websiteurl ” 另外:警告信息: 在download.file(url,“E:/data/data.csv”)中: 无法解析'用户名' 执行暂停
**上面的weburl是上面的http(我无法发布链接) 显然,.BAT的用户名/密码有问题?有什么想法吗?
*编辑*
我在Linux上尝试过这么多。想想也许窗户正在玩傻鬼。
只是从终端,我运行Rscript -e“download_data.r”并获得与我在Windows中相同的错误消息。所以我怀疑这可能是我获取数据的地方的问题?提供程序是否可以阻止来自命令行的数据,但不能阻止来自Rstudio的数据?
答案 0 :(得分: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”的目的是什么?该程序是否以任何方式使用它?
答案 1 :(得分: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
你可以这样做:
在R中syscomand> - “wget -O /home/.../file.csv --user = userid --password ='password'http://www.url.com/file.csv”
system(syscommand)
将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 Unauthorized?