чтение CSV-файлов через SSL с R - PullRequest
18 голосов
/ 08 ноября 2010

Теперь, когда весь мир все время пытается использовать SSL (решение, которое имеет много смысла), некоторые из нас, кто использовал github и связанные службы для хранения CSV-файлов, столкнулись с небольшой проблемой.Функция read.csv () не поддерживает SSL при чтении с URL.Чтобы обойти это, я делаю маленький танец, который мне нравится называть 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)

Ответы [ 6 ]

14 голосов
/ 09 ноября 2010

Нет необходимости записывать его в файл - просто используйте textConnection ()

require(RCurl)
myCsv <- getURL("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv")
WhatJDwants <- read.csv(textConnection(myCsv))
12 голосов
/ 08 ноября 2010

Использование совета Дирка для исследования 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")

8 голосов
/ 08 ноября 2010

Да - см. help(download.file), на который указывает read.csv() и все его кузены.Аргумент method= содержит:

method Метод, используемый для загрузки файлов.В настоящее время доступны методы загрузки «internal», «wget», «curl» и «lynx», и есть значение «auto»: см. «Подробности».Этот метод также можно установить с помощью параметра «download.file.method»: см. Options ().

, и затем вы используете эту опцию для options():

download.file.method: Метод, который будет использоваться для скачивания.В настоящее время доступны методы загрузки "internal", "wget" и "lynx".При выборе метода = "auto" по умолчанию этот параметр не устанавливается: см. Файл загрузки.

, чтобы обратиться к внешней программе curl, а не кRCurl пакет.

Редактировать : Похоже, я был наполовину прав, наполовину неправ.read.csv() и др. не используют выбранный метод, нужно вручную использовать download.file() (который затем использует curl или другие выбранные методы).Другие функции, которые используют download.file() (например, установка или обновление пакета), выиграют от установки этой опции, но для первоначального запроса JD, касающегося CSV-файлов через https, необходимо явно указать download.file() перед read.csv() загруженного файла.

6 голосов
/ 08 ноября 2010

Ядро R должно открывать R соединения как C API. Я предлагал это в прошлом:

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

без ответа.

2 голосов
/ 25 февраля 2015

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

0 голосов
/ 19 августа 2014

Я обнаружил, что поскольку Dropbox изменил способ представления ссылок с помощью https: // ни одно из вышеперечисленных решений больше не работает.К счастью, я не был первым, кто сделал это открытие, и Кристофер Гандруд опубликовал решение для r-блогеров:

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

Этот подход работает для меня после установки пакета repmis и его зависимостей.

...