2011-10-10 11 views
24

¿Hay alguna manera de obtener un script R desde la web?Script S de origen a través de HTTPS

p. Ej. source('http://github.com/project/R/file.r')

Motivo: Actualmente tengo un proyecto que me gustaría poner a disposición para su uso pero que aún no está listo para su empaquetado. Por lo tanto, sería genial darles a las personas un único archivo para que procedan de la web (que luego se encargará de todos los archivos de funciones individuales).

En una inspección más cercana, el problema parece ser https. ¿Cómo puedo obtener este archivo?

https://raw.github.com/hadley/stringr/master/R/c.r 
+1

Uhm ... ¿sí? ¿Trataste de hacer esto? ¿Que pasó? – ulidtko

+0

Sí, ver las ediciones anteriores. – Maiasaura

+1

Gracias por editar el título. – Maiasaura

Respuesta

21

Si puede, trate de ejecutar este R tutorial:

source("http://www.mayin.org/ajayshah/KB/R/tutorial.R") 

(Source)

Https sólo es compatible con Windows, cuando R se inició con la opción de línea --internet2 de comandos (ver FAQ):

> source("https://pastebin.com/raw.php?i=zdBYP5Ft") 
> test() 
[1] "passed" 

Sin esta opción, o en Linux, obtendrá el error "esquema de URL no soportado". En ese caso, el recurso a la solución sugerida por @ulidtko, o:

Aquí está una manera de hacerlo utilizando RCurl, que también es compatible con https:

library(RCurl) 
    eval(expr = 
     parse(text = getURL("http://www.mayin.org/ajayshah/KB/R/tutorial.R", 
         ssl.verifypeer=FALSE))) 

(Se puede quitar el ssl.verifypeer si el certificado SSL es válido)

+0

¿Cuál es su sistema y la versión R? Aparece el error "esquema URI no compatible". – ulidtko

+0

Extraño ... Lo probé con R 2.13.1 x64 y 2.13.2 x64 en Windows 7 x64. En el modo de consola (R.exe) no funciona para ambos, en Rgui solo para 2.13.1 y con 2.13.2 como consola en RStudio también funciona. Comprobé con (.packages()) y siempre solo se cargan estos 7: "stats"/"graphics"/"grDevices"/"utils"/"datasets"/"methods"/"base" – ROLO

+2

Encontré la solución: if R se inicia con la opción --internet2 sourcing from https works, ver también [link] (http://cran.r-project.org/bin/windows/rw-FAQ.html#The-Internet-download-functions- fail_002e) – ROLO

12

Sí, es posible y funcionó para mí de inmediato.

R> source("http://pastebin.com/raw.php?i=zdBYP5Ft") 
R> test() 
[1] "passed" 

En cuanto a la parte HTTPS, que no es compatible con el código R interna. Sin embargo, R puede usar utilidades externas como wget o curl para buscar URL https: //. Uno tendrá que escribir código adicional para poder source los archivos.

Código de ejemplo podría ser así:

wget.and.source <- function(url) { 
    fname <- tempfile() 
    download.file(url, fname, method="wget") 
    source(fname) 
    unlink(fname) 
} 

No es sólo para Windows solución demasiado: se inicia con la opción de línea de comandos R --internet2. Esto cambiará todo el código de Internet en R para usar IE, y consecuentemente HTTPS funcionará.

+4

El uso de la utilidad 'wget' también podría hacerse así:' source (pipe (paste ("wget ​​-O -", URL))) '. –

27

puede utilizar el SOURCE_URL en la biblioteca devtools

library(devtools) 
source_url('https://raw.github.com/hadley/stringr/master/R/c.r') 

Esta es una envoltura para el método RCurl por @ROLO

+0

devtools también maneja gists muy bien en R: devtools :: source_gist ('11326436') – tim

+0

¡Gracias, muy útil! –

+0

¡Gracias, esto funcionó muy bien para mí! –

2

de Windows:

Si Internet Explorer está configurado para acceder a la web usando proxy de la empresa, puede dirigir R para utilizar estos ajustes de IE en lugar del predeterminado R configuraciones.Este cambio se puede realizar una vez mediante los siguientes pasos:

  1. Guarde su trabajo y cierre todas las sesiones R que pueda tener abiertas.
  2. Edite el siguiente archivo. (Nota: Su ruta exacta será diferente en función de su instalación R)

    C: \ Archivos de programa \ R \ R-2.15.2 \ etc \ Rprofile.site

Abrir "Rprofile.site "archivo en el Bloc de notas y agregue la siguiente línea en una nueva línea al final del archivo:

utils::setInternet2(TRUE) 

ahora puede abrir una nueva sesión de R y vuelva a intentar el 'comando source'.

imitaciones de Linux:

sugerencia de uso G. Grothendieck. En el símbolo del sistema dentro del tipo R:

source(pipe(paste("wget -O -", "https://github.com/enter/your/url/here.r"))) 

Usted puede obtener un error diciendo:

cannot verify certificate - - - - Self-signed certificate encountered. 

En este punto depende de usted para decidir si confía en la persona que emite el certificado autofirmado y proceder o parar.

Si usted decide proceder, se puede conectar de forma insegura de la siguiente manera:

source(pipe(paste("wget -O -", "https://github.com/enter/your/url.r", "--no-check-certificate"))) 

Para más detalles, consulte el siguiente:

Véase la sección 2,19

preguntas similares aquí:

1

Los métodos aquí me estaban dando el siguiente error de GitHub:

OpenSSL: error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112) 

que utiliza la siguiente función para resolverlo:

github.download = function(url) { 
    fname <- tempfile() 
    system(sprintf("curl -3 %s > %s", url, fname))                                                                               
    return(fname) 
} 
source(github.download('http://github.com/project/R/file.r')) 

Espero que ayude!

Cuestiones relacionadas