2

可能重复:
R:如何将字符串转换为变量名?

在 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

并且未找到变量 1。

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

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

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

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

4

1 回答 1

13

分配工作是这样的:

<varname> = <expression>

或更传统的

<varname> <- <expression>

因此,在您的代码中,您只分配了varName. 这不是关于分配与平等,只是分配。你可能想看看assign

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

作为一个玩具的例子。

此外,如评论中所述,您的应用程序可能有更好的方法。例如,为什么不只使用向量,而不是使用名为,等myvector的变量,您可以参考,等等。Variable1Variable2myvector[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.

于 2012-11-03T21:56:31.283 回答