您的位置:首页 > 理论基础 > 计算机网络

R: 使用source()函数引用网络数据文件时,系统适配性问题

2014-11-18 19:34 411 查看
source()常见于引用本地文件或者网络文件。

引用网络文件的常见案例为:

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

但是当引用的地址为https://开头时(比如github中的文件的地址,通常都是以https开头),在非Windows系统中会出现error message。

这是因为当R以--internet2为命令符时,https只被Windows系统支持。

如果想要在Linux或者OS X系统中用source()引用网络文件,则需要调用add-on packages

以下有两种比较方便的方法来解决这个问题:

1. 调用RCurl包

library(RCurl)
eval( expr =
parse( text = getURL("https://raw.github.com/.../test.R")
ssl.verifypeer=FALSE) ))


当ssl 认证是有效的时候,ssl.verifypeer这条参数可以去掉。

2. 调用devtools包

library(devtools)
source_url("https://raw.github.com/..../test.R")
这其实是奖RCurl包装以后的一个包

那么,当写一个程序给多用户使用,而你又不知道适用对象所使用的操作系统是什么的时候,就必须要能够让程序自己判定如何调用了。

以下是一个调用多个网络.R程序的例子,是上面提到的第一种办法的一种变通的做法,仅供参考。

all.script <- c("a.R","b.R","c.R")

src.script <- function(file){
if(file.exists(file)){
source(file)
}else{
if(Sys.info()["sysname"] == "Windows")){
source(paste("https://raw.github.com/.../",file,sep=""))
}else{
if(!"RCurl" %in% installed.packages())install.packages("RCurl")
library(RCurl)
ex <- getURL(paste("https://raw.github.com/.../",file,sep=""),
ssl.verifypeer=0L, followlocation=1L)
writeLines(ex, "temp.R")
source("temp.R")
}
}
}

sapply(all.script, src.script)

参考: stackoverflow
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息