开发者

Sourcing R script over HTTPS

Is there some way to source an R script 开发者_如何学Pythonfrom 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


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


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)


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.


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


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!


This is working for me on windows:

library(RCurl)
# load functions and scripts from github ----------------------------
fn1 <- getURL("https://raw.githubusercontent.com/SanjitNarwekar/Advanced-R-Programming/master/fn_factorial_loop.R", ssl.verifypeer = FALSE)
eval(parse(text = fn1))
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜