有没有办法从R脚本中读取文件中的参数?
我想创建一个
的配置文件db_host=xxxx
db_name=xxxx
db_user=xxxx
db_pass=xxxx
然后在R脚本中使用它来创建数据库连接。
dbConnect(PgSQL(), host="xxxx", dbname="xxxxx", user="xxxx", password="xxxxx")
然后如何在R脚本中使用它。
编辑:我也想知道是否有一种方法可以在R Scripts,Perl Scripts& S中使用单个配置文件。爪哇?
答案 0 :(得分:38)
我会去YAML。与XML不同,专为人类可读写而设计。 R包“yaml”存在于CRAN上,我确信perl和java包也存在。
http://ftp.heanet.ie/mirrors/cran.r-project.org/web/packages/yaml/index.html
你无法获得比这更多的跨平台:
至少在我写一个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访问列表的命名元素。
答案 1 :(得分:12)
您可以在主脚本顶部的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)
答案 2 :(得分:3)
如果你建议使用等号分割列,内置的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]])
}
答案 3 :(得分:1)
您在此处描述的是对跨系统,平台,语言的常见配置的渴望......
这是一个很大的话题,并且已经有很多墨水泄漏了。有些人认为XML是答案,其他人更喜欢简单的相关格式,如JSON。您也可以尝试Apache样式的配置文件,因为大多数语言都有库(但R可能是个例外)。
我碰巧喜欢Google ProtocolBuffers这是快速,高效,跨平台,多语言,向前兼容......但有一个缺点是不是ascii文件(尽管你可以先读取ascii文件然后创建proto文件)。对于R,有RProtoBuf包。
答案 4 :(得分:0)
如果您使用 INI 配置文件,则可以使用 ini
包。例如:
library(ini)
config <- read.ini('/config/database.ini')