动态生成多个变量

时间:2016-02-04 14:26:48

标签: r

我一直在遇到我想使用for循环动态创建变量的情况(或者使用dplyr的类似/更高效的构造)。但是,我现在还不清楚如何做到这一点。

例如,下面显示的构造我直觉地希望生成10个变量,分配数字1:10,但它不起作用。

for (i in 1:10) {paste("variable",i,sep = "") = i}

错误

Error in paste("variable", i, sep = "") = i : 
target of assignment expands to non-language object

我应该用什么方法来做这件事?我假设有多种方法(包括更有效的dplyr方法)。完全披露:我对R来说比较新,非常感谢他们的帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

我自己多次遇到这个问题。解决方案是assign命令。

for(i in 1:10){
    assign(paste("variable", i, sep = ""), i)
}

如果您想将所有内容都放在一个向量中,可以使用sapply。下面的代码将为您提供1到10的向量,每个项目的名称将为"变量i,"其中i是每个项目的价值。这可能不是使用apply家庭的最漂亮或最优雅的方式,但我认为它应该运作得很好。

var.names <- function(x){
    a <- x
    names(a) <- paste0("variable", x)
    return(a)
}

variables <- sapply(X = 1:10, FUN = var.names)

这种方法似乎受到青睐,因为它将所有这些变量隐藏在一个对象中,而不是分散在整个全球环境中。这可以使将来更容易调用它们,从而无需使用get来搜索您保存的变量。

答案 1 :(得分:-2)

无需使用循环,您可以使用# user system elapsed # 0.02 0.00 0.02 创建字符表达式,然后使用paste0将其转换为无表达式,最后使用parse进行评估。

eval

答案 2 :(得分:-4)

您拥有的代码实际上并不比元素向量更有用:

x<-1
for(i in 2:10){
    x<-c(x,i)
}

(显然,这个例子很简单,可以使用x<-1:10并完成。我假设你需要对每个变量进行非向量计算。