studio read procedimiento para libreria leer importar datos con r ssl rcurl

procedimiento - read.csv en r



leer archivos csv en ssl con R (6)

R core debería abrir las conexiones R como API C. He propuesto esto en el pasado:

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

sin respuesta

Ahora que todo el mundo está buscando usar SSL todo el tiempo (una decisión que tiene mucho sentido), algunos de nosotros que hemos usado github y servicios relacionados para almacenar archivos csv tenemos un pequeño desafío. La función read.csv () no admite SSL al leer desde una URL. Para evitar esto, estoy haciendo un pequeño baile al que me gusta llamar el baile SSL kabuki. Agarro el archivo de texto con RCurl, lo escribo en un archivo temporal y luego lo leo con read.csv (). ¿Hay una manera más suave de hacer esto? ¿Mejor solución?

Aquí hay un ejemplo simple de SSL kabuki:

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)


Sí, consulte la help(download.file) read.csv() help(download.file) que se read.csv() y todos sus primos. El method= argumento que tiene:

method Método que se utilizará para descargar archivos. Actualmente, los métodos de descarga "interno", "wget", "curl" y "lynx" están disponibles, y hay un valor "auto": ver "Detalles". El método también se puede establecer a través de la opción "download.file.method": ver opciones ().

y luego usa esta opción para options() :

download.file.method: Método que se utilizará para download.file. Actualmente, los métodos de descarga "interno", "wget" y "lynx" están disponibles. No hay un valor predeterminado para esta opción, cuando se elige method = "auto": ver download.file.

para activar el curl programa externo , en lugar del paquete RCurl.

Editar : Parece que estaba medio correcto y medio equivocado. read.csv() y otros no usan el método seleccionado, uno necesita emplear manualmente download.file() (que luego usa curl u otros métodos seleccionados). Otras funciones que sí usan download.file() (como instalación o actualizaciones de paquetes) se beneficiarán de establecer la opción, pero para la consulta inicial de JD sobre archivos csv sobre https, se necesita un download.file() explícito antes de read.csv() del archivo descargado.


Usar el consejo de Dirk para explorar method="" resultó en este enfoque un poco más conciso que no depende del paquete RCurl externo.

temporaryFile <- tempfile() download.file("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv",destfile=temporaryFile, method="curl") read.csv(temporaryFile)

Pero parece que no puedo simplemente configurar las options("download.file.method"="curl")


No es necesario escribirlo en un archivo, solo use textConnection ()

require(RCurl) myCsv <- getURL("https://gist.github.com/raw/667867/c47ec2d72801cfd84c6320e1fe37055ffe600c87/test.csv") WhatJDwants <- read.csv(textConnection(myCsv))


Descubrí que, dado que Dropbox cambió la forma en que presentan los enlaces con https: // ninguna de las soluciones anteriores funciona más. Afortunadamente, yo no fui el primero en hacer este descubrimiento, y Christopher Gandrud publicó una solución sobre r-bloggers:

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

Ese enfoque funciona para mí, después de instalar el paquete repmis y sus dependencias.


Dado que esta pregunta surge mucho, he estado trabajando en un paquete para manejar sin problemas los datos HTTPS / SSL. El paquete se llama rio . Una versión de esta está en CRAN, pero la versión más nueva que ahora admite esto solo está disponible en GitHub . Una vez que haya instalado el paquete, puede leer los datos en una línea:

# 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

Básicamente, import maneja la descarga manual (utilizando curl) y luego infiere el formato de archivo de la extensión de archivo, creando así un marco de datos sin necesidad de saber qué función usar o cómo descargarla.