18

现在全世界都在争先恐后地使用 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)
4

6 回答 6

14

无需将其写入文件 - 只需使用 textConnection()

require(RCurl)
myCsv <- getURL("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv")
WhatJDwants <- read.csv(textConnection(myCsv))
于 2010-11-09T08:53:46.397 回答
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")

于 2010-11-08T19:13:38.770 回答
8

是的——看看help(download.file)哪个表亲和它的所有表亲都指向了哪个read.csv()。那里的method=论点有:

method 用于下载文件的方法。目前下载方法“internal”、“wget”、“curl”和“lynx”可用,并且有一个值“auto”:见“详情”。该方法也可以通过选项“download.file.method”设置:见 options()。

然后您可以使用此选项options()

download.file.method: 用于下载.file 的方法。当前下载方法“内部”、“wget”和“lynx”可用。There is no default for this option, when method = "auto" is chosen: see download.file.

转向外部程序 curl,而不是 RCurl 包。

编辑:看起来我是半对半错。read.csv()等人使用选定的方法,需要手动使用download.file()(然后使用curl或其他选定的方法)。其他确实使用的功能download.file()(例如包安装或更新)将从设置选项中受益,但对于京东最初通过 https 查询 csv 文件,download.file()需要在read.csv()下载文件之前显式。

于 2010-11-08T16:39:06.733 回答
6

R 核心应该以 C API 的形式打开 R 连接。我过去曾提出过这样的建议:

https://stat.ethz.ch/pipermail/r-devel/2006-October/043056.html

没有回应。

于 2010-11-08T16:38:30.950 回答
2

鉴于这个问题经常出现,我一直在研究一个无缝处理 HTTPS/SSL 数据的包。该软件包称为rio。它的一个版本在 CRAN 上,但现在支持它的最新版本仅在 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),然后从文件扩展名推断文件格式,从而创建一个数据框,而无需知道要使用什么函数或如何下载它。

于 2015-02-25T11:48:38.833 回答
0

我发现,由于 Dropbox 改变了他们使用 https:// 显示链接的方式,上述解决方案都不再有效。幸运的是,我不是第一个发现这一发现的人,Christopher Gandrud 在 r-bloggers 上发布了一个解决方案:

http://www.r-bloggers.com/dropbox-r-data/

在安装 repmis 包及其依赖项后,这种方法对我有用。

于 2014-08-19T19:37:50.567 回答