用R读取ssl上的csv文件

时间:2010-11-08 16:27:45

标签: r ssl rcurl

现在整个世界都在努力使用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)

6 个答案:

答案 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软件包及其依赖项之后,这种方法对我有用。