Подтвердить что ты не робот

Как получить параметры из файла конфигурации в R script

Есть ли способ читать параметры из файла в R script?

Я хочу создать файл конфигурации с

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

а затем используйте его в R script для создания соединения с БД.

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

а затем как его использовать в R Script.

EDITED: Я также хочу знать, есть ли способ, которым я могу использовать один файл конфигурации через R Scripts, Perl Scripts и Java?

4b9b3361

Ответ 1

Я бы пошел на YAML. Предназначен для чтения человеком, в отличие от XML. R-пакет "yaml" существует в CRAN, я уверен, что пакеты 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_ возвращает вашу конфигурацию в виде списка R, и вы можете получить доступ к именованным элементам списков, используя $-notation.

Ответ 2

Вы можете source() R script в верхней части основного script, который читается в параметрах вашего файла конфигурации. В зависимости от того, с кем вы делитесь своими сценариями, могут возникнуть проблемы с безопасностью базы данных и иметь информацию для входа в незашифрованном формате. В последнее время здесь возникает вопрос о том, что, я посмотрю, смогу ли я найти его через минуту.

В любом случае сохраните все ваши параметры db в файле с именем config.R, а затем на основном script, запустите:

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)

Ответ 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]])
}

Ответ 4

То, что вы здесь описываете, - это желание конфигурации общей для разных систем, платформ, языков,...

Это большая тема, и на ней пролилось много чернил. Некоторые люди рассматривают XML как ответ, другие предпочитают более простые связанные форматы, такие как JSON. Вы также можете попробовать конфигурационные файлы в стиле Apache, так как большинство языков имеют библиотеки для него (но R может быть исключением).

Мне нравится Google ProtocolBuffers, которые являются быстрыми, эффективными, кросс-платформенными, многоязычными, пересылаемыми по совместимости... но имеют один недостаток не быть ascii файлами (хотя сначала вы можете читать файлы ascii, а затем создавать прото файлы). Для R существует пакет RProtoBuf.