从https站点获取数据时,R会生成"不支持的URL方案"错误

Jon*_*rne 11 r knitr

R版本3.0.1(2013-05-16)适用于Windows 8 knitr版本1.5 Rstudio 0.97.551

我正在使用knitr我的R代码的降价.作为我的分析的一部分,我从网上下载了各种数据集,knitr从http网站获取数据完全没问题,但是从https网站获取数据产生了一个unsupported URL scheme消息.我知道在download.filemac上使用该函数时method,必须将参数设置为curl从https获取数据,但这在使用时无效knitr.

我需要做什么才能knitr从Https网站收集数据?

编辑:这是在Knitr中返回错误的代码块,但是当通过R运行时没有错误.

```{r}
fileurl <- "https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv"
download.file(fileurl, destfile = "C:/Users/xxx/yyy")
```
Run Code Online (Sandbox Code Playgroud)

Fab*_*ier 20

您可以通过将"curl"传递给方法,将https与download.file()函数一起使用:

download.file(url,destination,method="curl")
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 9

编辑(2016年5月):从R 3.3.0开始,download.file()应该在所有平台上自动处理SSL网站,使得这个答案的其余部分没有实际意义.

你想要这样的东西:

library(RCurl)
data <- getURL("https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv",
               ssl.verifypeer=0L, followlocation=1L)
Run Code Online (Sandbox Code Playgroud)

它将数据作为单个字符串读入内存.您仍然需要以某种方式将其解析为数据集.一个策略是:

writeLines(data,'temp.csv')
read.csv('temp.csv')
Run Code Online (Sandbox Code Playgroud)

您也可以直接分离数据而无需写入文件:

read.csv(text=data)
Run Code Online (Sandbox Code Playgroud)

编辑:更容易的选择实际上是使用rio包:

library("rio")
import("https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv")
Run Code Online (Sandbox Code Playgroud)

这将直接从HTTPS URL读取并返回data.frame.


Ren*_*uai 9

使用setInternet2(use = TRUE)前请先使用此download.file()功能.它适用于Windows 7.

setInternet2(use = TRUE)
download.file(url, destfile = "test.csv")
Run Code Online (Sandbox Code Playgroud)


use*_*373 5

我相信你现在已经找到了问题的解决方案.

我现在正在完成一项任务,最终得到同样的错误.我尝试了一些技巧,但这对我不起作用.也许是因为我在Windows机器上工作.

无论如何,我改变了链接到http:而不是https:这就是诀窍.

以下是我的代码块:

if (!file.exists("./PeerAssesment2")) {dir.create("./PeerAssessment2")}
fileURL <- "http://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
download.file(fileURL, dest = "./PeerAssessment2/Data.zip")

install.packages("R.utils")
library(R.utils)
if (!file.exists("./PeerAssessment2/Data")) {
    bunzip2 ("./PeerAssessment2/Data.zip", destname = "./PeerAssessment2/Data")
}
list.files("./PeerAssessment2")

noaaData <- read.csv ('./PeerAssessment2/Data')
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.