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