现在整个世界都在努力使用SSL(这个决定很有意义)我们中的一些人使用github和相关服务来存储csv文件有一点挑战。从URL读取时,read.csv()函数不支持SSL。为了解决这个问题,我正在做一个小舞蹈,我喜欢称之为SSL歌舞伎舞蹈。我用RCurl抓取文本文件,将其写入临时文件,然后用read.csv()读取它。这样做有更顺畅的方法吗?更好的解决方法?
以下是SSL歌舞伎的一个简单示例:
require(RCurl)
myCsv <- getURL("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv")
temporaryFile <- tempfile()
con <- file(temporaryFile, open = "w")
cat(myCsv, file = con)
close(con)
read.csv(temporaryFile)
答案 0 :(得分:14)
无需将其写入文件 - 只需使用textConnection()
即可require(RCurl)
myCsv <- getURL("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv")
WhatJDwants <- read.csv(textConnection(myCsv))
答案 1 :(得分:12)
使用Dirk的建议来探索method=""
导致这种更简洁的方法,不依赖于外部RCurl包。
temporaryFile <- tempfile()
download.file("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv",destfile=temporaryFile, method="curl")
read.csv(temporaryFile)
但似乎我不能只设置options("download.file.method"="curl")
答案 2 :(得分:8)
是 - 请参阅help(download.file)
及其所有堂兄指出的read.csv()
。 method=
参数有:
method
用于下载文件的方法。目前可以使用下载方法“internal”,“wget”,“curl”和“lynx”,并且有一个值“auto”:参见“Details”。该方法也可以通过选项“download.file.method”进行设置:参见options()。
然后您将此选项用于options()
:
download.file.method:
用于download.file的方法。目前可以使用下载方法“内部”,“wget”和“lynx”。当选择method =“auto”时,此选项没有默认值:请参阅download.file。
转到外部程序 curl
,而不是RCurl包。
编辑:看起来我是半右半错。 read.csv()
等不使用所选方法,需要手动使用download.file()
(然后使用curl
或其他选定方法)。使用download.file()
的其他功能(例如包安装或更新)将从设置选项中获益,但对于JD关于通过https的csv文件的初始查询,在{{1}之前需要显式的download.file()
已下载的文件。
答案 3 :(得分:6)
R core应该将R连接作为C API打开。我过去曾提出过这个问题:
https://stat.ethz.ch/pipermail/r-devel/2006-October/043056.html
没有回应。
答案 4 :(得分:2)
鉴于这个问题出现了很多,我一直致力于一个无缝处理HTTPS / SSL数据的软件包。该软件包名为 rio 。它的一个版本在CRAN上,但现在支持此is only available on GitHub的最新版本。安装软件包后,您可以在一行中读取数据:
# install and load rio
library("devtools")
install_github("leeper/rio")
library("rio")
# import
import("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv")
## a b
## 1 1 2
## 2 2 3
## 3 3 4
## 4 4 5
基本上,import
处理手动下载(使用curl),然后从文件扩展名中推断文件格式,从而创建数据帧而无需知道要使用的功能或如何下载它。
答案 5 :(得分:0)
我发现由于Dropbox改变了他们使用https://提供链接的方式,因此以上解决方案都不再有效。幸运的是,我不是第一个发现这个发现的人,Christopher Gandrud在r-bloggers上发布了一个解决方案:
http://www.r-bloggers.com/dropbox-r-data/
在安装repmis软件包及其依赖项之后,这种方法对我有用。