Загрузите файл с HTTPS с помощью файла download.file()
Я хотел бы прочитать онлайн-данные в R, используя download.file()
, как показано ниже.
URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"
download.file(URL, destfile = "./data/data.csv", method="curl")
Кто-то предложил мне добавить строку setInternet2(TRUE)
, но она по-прежнему не работает.
Ошибка, которую я получаю:
Warning messages:
1: running command 'curl "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv" -o "./data/data.csv"' had status 127
2: In download.file(URL, destfile = "./data/data.csv", method = "curl", :
download had nonzero exit status
Цените свою помощь.
Ответы
Ответ 1
Проще всего попробовать RCURL-пакет. Установите пакет и попробуйте выполнить следующее:
# install.packages("RCurl")
library(RCurl)
URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"
x <- getURL(URL)
## Or
## x <- getURL(URL, ssl.verifypeer = FALSE)
out <- read.csv(textConnection(x))
head(out[1:6])
# RT SERIALNO DIVISION PUMA REGION ST
# 1 H 186 8 700 4 16
# 2 H 306 8 700 4 16
# 3 H 395 8 100 4 16
# 4 H 506 8 700 4 16
# 5 H 835 8 800 4 16
# 6 H 989 8 700 4 16
dim(out)
# [1] 6496 188
download.file("https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv",destfile="reviews.csv",method="libcurl")
Ответ 2
Здесь обновление от ноября 2014 года. Я считаю, что настройка method='curl'
сделала трюк для меня (пока method='auto'
, не).
Например:
# does not work
download.file(url='https://s3.amazonaws.com/tripdata/201307-citibike-tripdata.zip',
destfile='localfile.zip')
# does not work. this appears to be the default anyway
download.file(url='https://s3.amazonaws.com/tripdata/201307-citibike-tripdata.zip',
destfile='localfile.zip', method='auto')
# works!
download.file(url='https://s3.amazonaws.com/tripdata/201307-citibike-tripdata.zip',
destfile='localfile.zip', method='curl')
Ответ 3
Мне удалось выполнить следующий код:
url = "http://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"
x = read.csv(file=url)
Обратите внимание, что я изменил протокол с https на http, так как первый не поддерживается в R.
Ответ 4
При использовании RCURL вы получите ошибку SSL в функции GetURL(), затем установите эти параметры перед GetURL(). Это установит настройки CurlSSL глобально.
Расширенный код:
install.packages("RCurl")
library(RCurl)
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))
URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"
x <- getURL(URL)
Работала для меня на 64-разрядной версии Windows 7 с использованием R3.1.0!
Ответ 5
Имела точно такую же проблему, как UseR (исходный вопрос), я также использую Windows 7. Я пробовал все предлагаемые решения, и они не работали.
Я решил проблему следующим образом:
-
Использование RStudio вместо консоли R.
-
Активация версии R (от 3.1.0 до 3.1.1), так что библиотека RCurl работает нормально. (Я использую сейчас R3.1.1 32bit, хотя моя система - 64 бит).
-
Я набрал URL-адрес как https (безопасное соединение) и с "/" вместо обратных косых черт "\".
-
Метод установки = "авто".
Теперь он работает для меня. Вы должны увидеть сообщение:
Тип контента 'text/csv; charset = utf-8 'длина 9294 байт
открытый URL-адрес
Скачано 9294
Ответ 6
127 означает, что команда не найдена
В вашем случае команда curl не найдена. Поэтому это означает, что завиток не найден.
Вам необходимо установить/переустановить CURL. Все это. Получите последнюю версию своей ОС от http://curl.haxx.se/download.html
Закройте RStudio перед установкой.
Ответ 7
Предлагая пакет curl в качестве альтернативы, который я считаю надежным при извлечении больших файлов из онлайн-базы данных. В недавнем проекте мне пришлось загрузить 120 файлов из онлайн-базы данных и найти его в половине времени передачи и быть намного надежнее, чем download.file.
#install.packages("curl")
library(curl)
#install.packages("RCurl")
library(RCurl)
ptm <- proc.time()
URL <- "https://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"
x <- getURL(URL)
proc.time() - ptm
ptm
ptm1 <- proc.time()
curl_download(url =URL ,destfile="TEST.CSV",quiet=FALSE, mode="wb")
proc.time() - ptm1
ptm1
ptm2 <- proc.time()
y = download.file(URL, destfile = "./data/data.csv", method="curl")
proc.time() - ptm2
ptm2
В этом случае приблизительное время на вашем URL-адресе не показало постоянной разницы в времени передачи. В моем приложении использование curl_download в script для выбора и загрузки 120 файлов с веб-сайта уменьшило время передачи с 2000 секунд на файл до 1000 секунд и увеличило надежность с 50% до 2 неудач в 120 файлах. script публикуется в моем ответе на вопрос, который я задал ранее, см..
Ответ 8
Вы можете установить глобальные параметры и попробовать -
options('download.file.method'='curl')
download.file(URL, destfile = "./data/data.csv", method="auto")
Для справки обратитесь к link-
https://stat.ethz.ch/pipermail/bioconductor/2011-February/037723.html
Ответ 9
Попробуйте выполнить следующие действия с тяжелыми файлами
library(data.table)
URL <- "http://d396qusza40orc.cloudfront.net/getdata%2Fdata%2Fss06hid.csv"
x <- fread(URL)