将变量名称分配给 R 中参数文件中的值的最佳方法?

Best way to assign variable names to values from a parameter file in R?

我有一个 R 程序,它的参数文件很大而且还在不断增长。目前,我读取文件值并手动将它们分配给程序中使用的变量名称。这很笨拙,尤其是当我想在参数列表中添加新项目时。

比如我可以使用cvs或者text格式存储的toy文件,

## test using comments and blank lines
3     #an integer
TRUE  # a logical
5.3     #numeric

# and here is some
# commentary ...
2014-6-5   # a date
7.8     #strange here
some text  #text here

并使用类似这样的方式回读文件,

some.lst <- scan("Data/TestReadData.txt", what = character(),
sep = "\n", comment.char = "#", 
strip.white = TRUE, quiet = TRUE)

这将生成模式“文本”的值列表。然后我继续将这些值分配给变量值,如下所示:

first.int <- as.integer(some.ls[1])
my.switch <- as.logical(some.ls[2])
parm1 <- as.numeric(some.ls[3])
the.date <- as.Date(some.ls[4])
nxt.val <- as.numeric(some.ls[5])
my.text <- some.ls[6]

但是,我有 40 个,现在我想在下面的列表中添加一个新参数,例如,低于给定示例中的 5.3 值。我必须进入并将新值添加到参数文件中,但还要将新变量添加到变量赋值列表中并重新排列赋值的所有索引。

当然,有更好的方法来做到这一点,但我想不出任何东西。非常感谢您的想法。

假设你有一些东西,当它被读入 R 时全部被强制转换为字符:

some_stuff <- c("11","TRUE","1.2")

首先,写下你希望如何处理每一件事:

cleanem <- read.table(header=TRUE,text="
i   nm          type      
1   first.int   integer
2   my.switch   logical
3   parm1       numeric
",stringsAsFactors=FALSE)

然后处理它们,将结果存储在列表中:

res <- with(cleanem,setNames(mapply(as,some_stuff,type,SIMPLIFY=FALSE),nm))
# $first.int
# [1] 11

# $my.switch
# [1] TRUE

# $parm1
# [1] 1.2