[R] scan or source a text file into a list

Deepayan Sarkar deepayan at stat.wisc.edu
Thu Nov 11 18:24:24 CET 2004


On Thursday 11 November 2004 09:57, Andy Bunn wrote:
> I've ported somebody else's rather cumbersome Matlab model to R for
> colleagues that want a free build of the model with the same type of
> I/O.
>
> The Matlab model reads a text file with the initial parameters
> specified as:
>
> C:\Data\Carluc\Rport>more Params.R
> # Number of years to simulate
> nYears = 50;
> # Initial year for graphing purposes
> year0 = 1970;
> # NPP/GPP ratio (cpp0 unitless)
> fnr = 0.30;
> # Quantum efficency
> qe  = 0.040;
>
> That is, there are four input variables (for this run - there can be
> many more) written in a way that R can understand them. In R, I can
> have the model source the parameter text file easily enough and have
> the objects in the workspace. The model function in R takes a list at
> runtime. How can I have R read that file and put the contents into
> the list I need?
>
> E.g.,
>
> > rm(list = ls())
> > source("Params.R")
> > ls()
>
> [1] "fnr"    "nYears" "qe"     "year0"
>
> > fnr
>
> [1] 0.3
>
> > nYears
>
> [1] 50
>
> > foo.list <- list(fnr = fnr, nYears = nYears)
> >
> > foo.list
>
> $fnr
> [1] 0.3
>
> $nYears
> [1] 50
>
>
> The model is then run with
>
> > CarlucR(inputParamList = foo.list, ...)
>
> I can't build inputParamList "by hand" as above because the number of
> initial parameters changes with the model run and this runs in a
> wrapper.
>
> Any thoughts? Some combination of paste with scan or parse?

Approaching this slightly differently, how about 

read.pars <- function(file)
{
    foo <- read.table(file, as.is = TRUE)
    ans <- lapply(strsplit(foo[[3]], ";"), as.numeric)
    names(ans) <- foo[[1]]
    ans
}

Deepayan




More information about the R-help mailing list