2011-10-10 66 views
24

有什么方法可以从网上采购R脚本?通过HTTPS采购R脚本

例如source('http://github.com/project/R/file.r')

原因:我目前有一个项目可供使用,但尚未准备好打包。所以,给人们一个单一的文件来源于网络会很好,然后它将获得所有的单个函数文件。

仔细检查,问题似乎是https。我将如何获得这个文件?

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

呃...是吗?你有没有试图做到这一点?发生了什么? – ulidtko

+0

是的,请参阅上面的编辑。 – Maiasaura

+1

感谢您编辑标题。 – Maiasaura

回答

21

是的,你可以尝试运行该R教程:

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

Source

HTTPS是只支持Windows,当R开始与--internet2命令行选项(参见FAQ):

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

没有这个选项,或者在linux上,你会得到错误“不支持的URL方案”。在这种情况下诉诸该解决方案通过@ulidtko,或建议:

这里是一个办法使用RCurl,同时也支持HTTPS做到这一点:

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

(您可以删除ssl.verifypeer如果SSL证书有效期)

+0

什么是您的系统和R版本?我收到“不受支持的URI方案”错误。 – ulidtko

+0

奇怪...我在Windows 7 x64上用R 2.13.1 x64和2.13.2 x64试了一下。在控制台模式下(R.exe),它不适用于两者,在Rgui中仅适用于2.13.1,而在2.13.2中作为RStudio中的控制台也适用。我检查了(.packages()),并且总是只加载这7个:“stats”/“graphics”/“grDevices”/“utils”/“datasets”/“methods”/“base” – ROLO

+2

Found the solution:if R从选项--internet2从https工作源中启动,另请参见[link](http://cran.r-project.org/bin/windows/rw-FAQ.html#The-Internet-download-functions- fail_002e) – ROLO

12

是的,这是可能的,并为我工作马上。

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

关于HTTPS部分,它不是由内部研发代码支持。但是,R可以使用外部实用程序(如wgetcurl)来获取https:// URL。其中一个需要编写额外的代码才能够对这些文件进行source

示例代码可能是这样的:

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

有一个Windows的唯一的解决办法太:与--internet2命令行选项启动R上。这会将R中的所有互联网代码切换为使用IE,因此HTTPS将起作用。

+4

使用'wget'工具也可以这样做:'source(pipe(paste(“wget -O - ”,URL)))'。 –

27

您可以使用SOURCE_URL在devtools库

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

这是RCurl方法的包装由@ROLO

+0

devtools也可以很好地处理g: devtools :: source_gist('11326436') – tim

+0

谢谢,非常方便! –

+0

谢谢,这对我来说非常好! –

2

的Windows:

如果Internet Explorer被配置为使用贵公司的代理来访问网络,您可以直接R键,而不是使用默认的R这些IE设置设置。可以通过以下步骤进行一次该更改:

  1. 保存您的工作并关闭您可能已打开的所有R会话。
  2. 编辑下列文件。 (注:您的确切路径会因您的R安装过程中)

    C:\ Program Files文件\ r \ R-2.15.2 \等\ Rprofile.site

打开这个“Rprofile.site “文件中的记事本,并添加下面一行在新的一行在文件的结尾:

utils::setInternet2(TRUE) 

您现在可以打开一个新的R会话,然后重试‘源文件’命令。

Linux相同:

使用G.格洛腾迪克的建议。在R型中的命令提示符:

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

您可能会收到一条错误消息:

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

在这一点上它是由你来决定你是否信任签发自签名证书的人并继续或停止。

如果决定继续,您可以不安全连接如下:

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

有关详细信息,请参阅以下内容:

见部分2.19

类似的问题:

1

此处的方法是给我下面的错误从GitHub:

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

我用下面的函数来解决这个问题:

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

希望帮助!