r - for循环中的变量赋值

标签 r variable-assignment

<分区>

Possible Duplicate:
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 值向量。

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

编辑:更改标题是因为我对问题的描述有误。

最佳答案

赋值是这样的:

<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](其中还包含'酒吧')。这里的要点是,在 R 中使用向量和数据帧比使用一长串变量要容易得多。

您可以进一步命名条目:

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

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

关于r - for循环中的变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13213845/

相关文章:

java - Java中 'pass by reference'/'pass by value'变量赋值的规则是什么?

python - 使用 while 循环查找输入数字的平均值并使用 break 语句退出循环的程序

r - "Error: Don' 在 R 中保存主题格式时不知道如何将 RHS 添加到主题对象

r - R:如何检查向量是否正在上升/下降

R:使用棘手的分隔符将列分成行

javascript - 在同一语句中声明依赖的 javascript 变量是否安全?

string - 奇怪的行为,同时变量与函数的输入和输出相同

r - 在每一行数据帧上使用 dplyr 循环

r - 如何在大列表中用 NA 替换特定值(例如 -10000)?

c++ - 复制指针值c++