for循环中的变量赋值

时间:2012-11-03 21:50:29

标签: r variable-assignment

  

可能重复:
  R: How to convert string to variable name?

在R中,我正在编写一个for循环,它将迭代地创建变量名,然后为每个变量赋值。

这是一个简化版本。目的是根据迭代变量i的值创建变量的名称,然后用NA值填充新变量。

(我只是在下面1:1迭代,因为问题发生与循环本身无关,而是与创建和分配变量的方式有关。)

for (i in 1:1) {

    #name variable i "Variablei"
    varName = paste("Variable", as.character(i), sep="")

    #fill variable with NA values
    varName = rep(NA, 12)

    print(varName)
    print(Variable1)
}

现在,varName打印为

 [1] NA NA NA NA NA NA NA NA NA NA NA NA
找不到

和Variable1。

我在某种程度上理解为什么这是错误的。在第一行中,varName成为一个向量,其唯一的条目是字符串“Variable1”。然后重新分配varName以保存NA值。因此,当我尝试打印Variable1时,它不存在。

我认为更普遍的问题是任务与平等。在第一行中,我希望varName与等于新创建的字符串,但在下一行中,我希望将varName分配给 NA值向量。< / p>

创造这种区别的最简单方法是什么?我也愿意接受完全不同的,更好的方法来解决这个问题。

编辑:更改了标题,因为我错误地描述了问题。

1 个答案:

答案 0 :(得分:12)

作业的作用如下:

<varname> = <expression>

或更传统

<varname> <- <expression>

因此,在您的代码中,您只被分配到varName。这不是关于任务与平等,只是分配。您可能需要查看assign

for (i in 1:5) {
  assign(paste0("Variable", i), 10*i)
} 

作为玩具的例子。

此外,正如评论中所述,您的应用程序可能有更好的方法。例如,为什么不使用向量myvector而不是使用名为Variable1Variable2等变量,您可以参考myvector[1]myvector[2]等。

例如,我们假设您已计划使用

Variable1 <- 'foo'
Variable2 <- 'bar'
Variable3 <- 'baz'

然后,您可以改变方法,并设置

mydata <- c('foo', 'bar', 'baz')

以及您之前使用Variable2(包含'bar')的位置,而是使用mydata[2](其中还包含'bar')。这里的要点是,使用R中的向量和数据帧比使用一长串变量更容易。

您可以进一步命名条目:

names(mydata) <- paste0("V", 1:3)

然后允许您编写mydata["V2"]来检索bar