我有一系列变量和值:
var1<- "MyVar1"
var2<- "MyVar2"
...
varN<- "MyVarN"
values1 <- c("a","b", "c")
values2 <- c("d","e", "f", "g")
...
valuesN <- c(...)
数字N以及varX和valuesX的值在运行时是已知的(由用户提供)。
我需要将它们转换为函数参数,例如:
globalvar = list(MyVar1=c("a","b", "c"), MyVar2=c("d","e", "f", "g"), ... varN=c(...))
然后将其提供给函数myfunction():
myfunction(globalvar = list(MyVar1=c("a","b", "c"), MyVar2=c("d","e", "f", "g"), ... varN=c(...)), other_parameters)
答案 0 :(得分:2)
这是一种更简洁的方法:
# Helper function to extract values / names
read <- function (prefix) function (i) get(paste0(prefix, i))
# Collect arguments
args <- setNames(lapply(1 : N, read('values')), lapply(1 : N, read('var')))
# Call function
myfunction(globalvar = args, other_parameters)
参数集合仍然包含一些重复,因为我们对值和它们的名称基本相同,但我认为这是允许的,特别是因为我们已将它们的实际工作推广到read
帮助器中
另请注意,您实际上不需要使用单独环境的解决方案。您实际上只是以一种错综复杂的方式将变量从myListe
复制到新列表tmp
。
答案 1 :(得分:1)
var3 <- list(values1, values2, ..., valuesN)
names(var3) <- c("MyVar1", "MyVar2", ... "MyVarN")
答案 2 :(得分:0)
最后我提出了这个解决方案:
myListe <- list()
for (i in 1:N) {
var.name <- get(paste("var",i,sep=""))
var.values <- get(paste("values",i,sep=""))
myListe[i] <- list(var.values)
names(myListe)[i] <- list(var.name)
}
tmp <- new.env() ; assign('globalvar',as.list(myListe),envir=tmp)
然后我调用函数myfunction()如下:
do.call(myfunction, c(as.list(tmp),as.list(other_parameters)))
有没有更简洁的方法来做同样的事情?