将变量名称分配给 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
我有一个 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