for循环中的变量赋值

hal*_*ass 2 r variable-assignment

可能重复:
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)
}
Run Code Online (Sandbox Code Playgroud)

现在,varName打印出来

 [1] NA NA NA NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)

找不到和Variable1.

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

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

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

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

sea*_*ody 12

作业的工作原理如下:

<varname> = <expression>
Run Code Online (Sandbox Code Playgroud)

或更传统的

<varname> <- <expression>
Run Code Online (Sandbox Code Playgroud)

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

for (i in 1:5) {
  assign(paste0("Variable", i), 10*i)
} 
Run Code Online (Sandbox Code Playgroud)

作为一个玩具的例子.

此外,正如评论中所述,您的应用程序可能有更好的方法.例如,为什么不直接使用矢量myvector和,而不是已经叫变量Variable1,Variable2等你可以参考myvector[1],myvector[2]等等.

举个例子,我们假设你曾计划与之合作

Variable1 <- 'foo'
Variable2 <- 'bar'
Variable3 <- 'baz'
Run Code Online (Sandbox Code Playgroud)

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

mydata <- c('foo', 'bar', 'baz')
Run Code Online (Sandbox Code Playgroud)

以及你之前使用过Variable2(包含'bar')的地方你改为使用mydata[2](也包含'bar').这里的要点是,使用R中的向量和数据帧比使用一长串变量更容易.

你可以更进一步,并命名条目:

names(mydata) <- paste0("V", 1:3)
Run Code Online (Sandbox Code Playgroud)

然后允许你写入mydata["V2"]检索bar.