Подтвердить что ты не робот

Загрузите файл с 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

Цените свою помощь.

4b9b3361

Ответ 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)