passcot
passcot

Reputation: 199

Config file in a csv (or txt) format

I want to create a config file. In an R file it would look like the following:

#file:config.R
min_birthday_year <- 1920
max_birthday <- Sys.Date() %m+% months(9)
min_startdate_year <- 2010
max_startdate_year <- 2022

And in the main script I would do: source("config.R") .

However, now I want to source the config data from a .csv file. Does anyone have any idea how to? The file could also be in a .txt format

Upvotes: 0

Views: 727

Answers (1)

henryn
henryn

Reputation: 1237

First thing I would suggest is looking into the config package. It allows you to specify variables in a yaml text file. I haven't used it but it seems pretty neat and looks like it may be a good solution.

If you don't want to use that, then if your csv is something like this, with var names in one column and values in the next:

min_birthday_year,1920
max_birthday,Sys.Date() %m+% months(9)
min_startdate_year,2010
max_startdate_year,2022

then you could do something like this:

# Read in the file
# assuming that names are in one column and values in another
# will create vars using vals from second col with names from first

config <- read.table("config.csv", sep = ",")

# mapply with assign, with var names in one vector and values in the other
# eval(parse()) call to evaluate value as an expression - needed to evaluate the Sys.Date() thing. 
# tryCatch in case you add a string value to the csv at some point, which will throw an error in the `eval` call

mapply(
  function(x, y) {
    z <- tryCatch(
      eval(parse(text = y)),
      error = function(e) y
    )
    assign(x, z, inherits = TRUE)
  },
  config[[1]],
  config[[2]]
)

Upvotes: 1

Related Questions