如何将变量值转换为变量名?

时间:2013-12-21 04:24:22

标签: r

我有一系列变量和值:

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)

3 个答案:

答案 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)))

有没有更简洁的方法来做同样的事情?