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

时间:2013-11-10 14:06:07

标签: r knitr

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

我使用knitr来做我的R代码的降价。 作为我分析的一部分,我从网上下载了各种数据集,knitr完全可以从http网站获取数据,但是从https网站获取数据,生成unsupported URL scheme消息。 我知道在Mac上使用download.file函数时,必须将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")
```

7 个答案:

答案 0 :(得分:20)

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

download.file(url,destination,method="curl")

答案 1 :(得分: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)

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

writeLines(data,'temp.csv')
read.csv('temp.csv')

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

read.csv(text=data)

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

library("rio")
import("https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv")

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

答案 2 :(得分:9)

在使用setInternet2(use = TRUE)功能之前使用download.file()。它适用于Windows 7.

setInternet2(use = TRUE)
download.file(url, destfile = "test.csv")

答案 3 :(得分: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')

希望这会有所帮助。

答案 4 :(得分:4)

我在Windows 8上遇到了与knitr和download.file()以及https网址相同的问题。

您可以在使用setInternet2(TRUE)功能之前尝试download.file()。但是我不确定这个修复程序是否适用于类Unix系统。

setInternet2(TRUE)  # set the R_WIN_INTERNET2 to TRUE
fileurl <- "https://dl.dropbox.com/u/7710864/data/csv_hid/ss06hid.csv"
download.file(fileurl, destfile = "C:/Users/xxx/yyy") # now it should work

来源: R文档(?download.file()):

  

请注意,仅当设置了--internet2或环境变量R_WIN_INTERNET2或使用了setInternet2(TRUE)(以使用Internet Explorer内部)时才支持https:// URL,并且仅当证书被认为是有效的。

答案 5 :(得分:1)

我遇到了同样的问题,https使用以下代码在R中完美运行并在编织为html时获得unsupported URL scheme

temp = tempfile()
download.file("https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2Factivity.zip", temp)
data = read.csv(unz(temp, "activity.csv"), colClasses = c("numeric", "Date", "numeric"))

我尝试了所有在这里发布的解决方案,没有任何效果,在绝对的绝望中,我刚刚删除了网址中“https”中的“s”,一切都很好......

答案 6 :(得分:0)

使用R 下载包可以处理通常与文件下载相关的奇怪细节。举个例子,你需要做的就是:

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