for循环[重复]内变量分配(Variable assignment within a for-lo

2019-07-03 13:48发布

可能重复:
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中其唯一的条目是字符串“变量1”的向量。 然后varName中被重新分配给持有NA值。 所以,当我尝试打印变量1,它不存在。

我认为,更普遍的问题是分配与平等。 在第一行中,我想的varName为等于在新制成的字符串,但在下一行,我想的varName 要分配给 NA值向量。

什么是创建区别的最简单的方法? 我也开到完全不同的,更好的方式去了解这一点。

编辑:更改标题,因为我已经曲解了问题。

Answer 1:

分配是这样的:

<varname> = <expression>

以上传统

<varname> <- <expression>

所以,在你的代码,你只曾经分配给varName 。 这不是分配VS平等,公正的分配。 你可能想看看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' )。 这里的关键是,它是非常容易与载体和dataframes工作中的R比的变量一个长长的清单。

你可以走得更远并命名条目:

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

然后让你写mydata["V2"]检索bar



文章来源: Variable assignment within a for-loop [duplicate]