如何从R脚本的configuration文件中获取参数

有没有办法从R脚本中的文件读取参数?

我想创build一个configuration文件

db_host=xxxx db_name=xxxx db_user=xxxx db_pass=xxxx 

然后在R脚本中使用它来创build数据库连接。

 dbConnect(PgSQL(), host="xxxx", dbname="xxxxx", user="xxxx", password="xxxxx") 

然后如何在R脚本中使用它。

编辑:我也想知道是否有一种方法,我可以在R脚本,Perl脚本和Java使用一个单一的configuration文件?

我会去YAML。 与XML不同,专为人类读写而设计。 R包中存在“yaml”,我相信perl和java包也存在。

http://ftp.heanet.ie/mirrors/cran.r-project.org/web/packages/yaml/index.html

你不能得到比这更多的跨平台:

http://yaml.org/

至少在我写一个YAML FORTRAN包的时候

[编辑]

例。 假设你有config.yml:

 db: host : foo.example.com name : Foo Base user : user453 pass : zoom 

然后yaml.load_file(“config.yml”)返回:

 $db $db$pass [1] "zoom" $db$user [1] "user453" $db$name [1] "Foo Base" $db$host [1] "foo.example.com" 

所以你也是:

 library(yaml) config = yaml.load_file("config.yml") dbConnect(PgSQL(), host=config$db$host, dbname=config$db$name, user=config$db$user, password=config$db$pass) 

根据需要添加尽可能多的部分和参数。 Sweeeeyit。

yaml.load_file将您的配置作为R列表返回,您可以使用$ -notation访问列表的已命名元素。

你可以在你的主脚本的顶部输入source()一个R脚本来读取你的配置文件参数。 根据您与谁共享脚本,数据库安全性可能存在问题,登录信息以未加密格式存在。 关于这个,最近有一个关于这个问题的问题,我会看看我能否在一分钟内找到答案。

总之,将所有数据库参数存储在名为config.R的文件中,然后在主脚本上运行:

 source("config.R") #Will create four objects named "db_host, db_name, db_user, db_pass" dbConnect(PgSQL(), host=db_host, dbname=db_name, user=db_user, password=db_pass) 

如果你建议使用等号拆分列,那么内建的R函数read.table可以很好地处理这种INI格式。

 key.val<-read.table(filename, sep="=", col.names=c("key","value"), as.is=c(1,2)) 

如果您想要更传统的INI行为,以便您可以使用多个配置文件,请尝试将键值对分配给R环境。 例如:

 read.config<-function(filename) { conf.vars<-new.env() for (f in filename) { if (file.exists(f)) { header<-1 key.val<-read.table(f, sep="=", col.names=c("key","value"), skip=header, as.is=c(1,2)) for (kidx in seq(length(key.val$key))) { assign(key.val[["key"]][kidx], key.val[["value"]][kidx], envir=conf.vars) } } } return(conf.vars) } get.config<-function(name) { kv.env=read.config(c("project.cfg","project_local.cfg")) return(kv.env[[name]]) } 

你在这里描述的是一个系统,平台,语言, 通用配置的愿望…

这是一个很大的话题,在这方面已经流传了很多墨水。 有些人认为XML是答案,其他人更喜欢简单的相关格式,如JSON。 你也可以尝试Apache风格的配置文件,因为大多数语言都有它的库(但是R可能是个例外)。

我碰巧喜欢Google协议缓冲区 ,它是快速,高效,跨平台,多语言,向前兼容…但有一个缺点是不ascii文件(虽然你可以先读取ascii文件,然后创建原始文件) 。 对于R,有RProtoBuf包。