R создает ошибку "неподдерживаемая схема URL" при получении данных с сайтов https

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.file на mac параметр 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")
```

Ответ 1

Изменить (май 2016 г.): Начиная с 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")

Это будет читаться непосредственно с URL-адреса HTTPS и возвращать data.frame.

Ответ 2

Вы можете использовать https с функцией download.file(), передав "curl" в метод как:

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

Ответ 3

Используйте setInternet2(use = TRUE) перед использованием функции download.file(). Он работает в Windows 7.

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

Ответ 4

Я уверен, что вы уже нашли решение своей проблемы.

Я работал над заданием прямо сейчас и получил ту же ошибку. Я пробовал некоторые из трюков, но это не сработало для меня. Может быть, потому, что я работаю на 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')

Надеюсь, это поможет.

Ответ 5

У меня была такая же проблема с knitr и download.file() с https-адресом в Windows 8.

Вы можете попробовать 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()):

Обратите внимание, что URL-адреса https://поддерживаются только в том случае, если была установлена ​​или указана переменная среды - RINITY_INTERNET2 или setInternet2 (TRUE) (для использования внутренних элементов Internet Explorer), а затем только в том случае, если сертификат считается действительный.

Ответ 6

У меня была такая же проблема с https, когда следующий код отлично работал в R и получал unsupported URL scheme при вязании в html:

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"))

Я пробовал все решения, размещенные здесь, и ничего не работало, в моем абсолютном отчаянии я просто исключил "s" в "https" в URL-адресе, и все получилось...

Ответ 7

Использование пакета R для загрузки обеспечивает увлекательные детали, обычно связанные с загрузкой файлов. Для примера, все, что вам нужно было сделать, было бы:

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