Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sourcing R script over HTTPS

Tags:

r

Is there some way to source an R script from the web?

e.g. source('http://github.com/project/R/file.r')

Reason: I currently have a project that I'd like to make available for use but isn't ready to be packaged yet. So it would be great to give people a single file to source from the web (that will then source all the individual function files).

On closer inspection, the problem appears to be https. How would I source this file?

https://raw.github.com/hadley/stringr/master/R/c.r
like image 470
Maiasaura Avatar asked Oct 10 '11 16:10

Maiasaura


People also ask

What does source () do in R?

source causes R to accept its input from the named file or URL or connection or expressions directly.

How do I run an R script from another R script?

You can execute R script as you would normally do by using the Windows command line. If your R version is different, then change the path to Rscript.exe. Use double quotes if the file path contains space.


5 Answers

You can use the source_url in the devtools library

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

This is a wrapper for the RCurl method by @ROLO

like image 195
Etienne Low-Décarie Avatar answered Sep 25 '22 10:09

Etienne Low-Décarie


Yes you can, try running this R tutorial:

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

(Source)

Https is only supported on Windows, when R is started with the --internet2 command line option (see FAQ):

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

Without this option, or on linux, you will get the error "unsupported URL scheme". In that case resort to the solution suggested by @ulidtko, or:

Here is a way to do it using RCurl, which also supports https:

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

(You can remove the ssl.verifypeer if the ssl certificate is valid)

like image 36
ROLO Avatar answered Sep 27 '22 10:09

ROLO


Yes, it is possible and worked for me right away.

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

Regarding the HTTPS part, it isn't supported by internal R code. However, R can use external utilities like wget or curl to fetch https:// URLs. One will need to write additional code to be able to source the files.

Sample code might be like this:

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

There is a Windows-only solution too: start R with --internet2 commandline option. This will switch all the internet code in R to using IE, and consequently HTTPS will work.

like image 28
ulidtko Avatar answered Sep 28 '22 10:09

ulidtko


Windows:

If Internet Explorer is configured to access the web using your organization's proxy, you can direct R to use these IE settings instead of the default R settings. This change can be made once by the following steps:

  1. Save your work and close all R sessions you may have open.

  2. Edit the following file. (Note: Your exact path will differ based on your R installation)

    C:\Program Files\R\R-2.15.2\etc\Rprofile.site

Open this "Rprofile.site" file in Notepad and add the following line on a new line at the end of the file:

utils::setInternet2(TRUE)

You may now open a new R session and retry your "source" command.

Linux alikes:

Use G. Grothendieck's suggestion. At the command prompt within R type:

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

You may get an error saying:

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

At this point it is up to you to decide whether you trust the person issuing the self-signed certificate and proceed or to stop.

If you decide to proceed, you can connect insecurely as follows:

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

For more details, see the following:

See section 2.19

  • CRAN R Documentation 2.19
  • wget documentation section 2.8 for "no-check-certificate"

Similar questions here:

  • Stackoverflow setInternet2 discussion
  • Stackoverflow Proxy configuration discussion
like image 38
Stan Avatar answered Sep 26 '22 10:09

Stan


The methods here were giving me the following error from github:

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

I used the following function to resolve it:

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'))

Hope that helps!

like image 25
Damon Snyder Avatar answered Sep 25 '22 10:09

Damon Snyder