scan or source a text file into a list
On Thu, 11 Nov 2004, 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:
I think I would be tempted to try out read.dcf() for this, which returns a character matrix of field values in named columns, from which values cast to numeric:
system("cat tmp/Params.dcf")
nYears: 50 year0: 1970 fnr: 0.30 qe: 0.040
x <- read.dcf("tmp/Params.dcf")
x
nYears year0 fnr qe [1,] "50" "1970" "0.30" "0.040"
str(x)
chr [1, 1:4] "50" "1970" "0.30" "0.040" - attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr [1:4] "nYears" "year0" "fnr" "qe" Since you will know the mode you need, you could read the same-mode fields together and cast them:
x <- read.dcf("tmp/Params.dcf", fields=c("nYears", "year0"))
mode(x) <- "integer"
x
nYears year0 [1,] 50 1970 and make x a data frame if say x$nYears is needed, which gets to list:
as.list(data.frame(x))
$nYears [1] 50 $year0 [1] 1970 and c() of the different mode lists to make inputParamList. I think treating everything as numeric may be enough, and the DCF format is flexible. Roger
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? -Andy
version
_ platform i386-pc-mingw32 arch i386 os mingw32 system i386, mingw32 status major 2 minor 0.0 year 2004 month 10 day 04 language R
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Roger Bivand Economic Geography Section, Department of Economics, Norwegian School of Economics and Business Administration, Breiviksveien 40, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 93 93 e-mail: Roger.Bivand at nhh.no