如何动态命名变量?

Mai*_*ura 89 r assign r-faq

是否可以动态创建新的变量名称?

我想将列表中的数据帧读入最后带数字的新变量.像orca1,orca2,orca3 ......

如果我尝试类似的东西

paste("orca",i,sep="")=list_name[[i]]
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

target of assignment expands to non-language object
Run Code Online (Sandbox Code Playgroud)

还有另一种方法吗?

Sha*_*ane 111

用途assign:

assign(paste("orca", i, sep = ""), list_name[[i]])
Run Code Online (Sandbox Code Playgroud)

  • 这是怎么做的.这里有一个元问题,"我应该这样做吗?" 答案几乎总是"不".列表中的命名元素几乎总是首选. (28认同)
  • 答案几乎总是"不",除非事实并非如此. (23认同)
  • 嗯,当然.但是大多数寻求这个答案的人并没有这样做,因为他们拒绝了一份申请表. (9认同)
  • 你有什么理由不使用`paste0`吗? (4认同)

Joh*_*ohn 32

在我看来,你可能会用一个列表,而不是使用更好orca1,orca2等等......那将是orca[1],orca[2]...

通常你要制作一个变量列表,除了数字之外什么都不区分,因为这个数字是以后访问它们的便捷方式.

orca <- list()
orca[1] <- "Hi"
orca[2] <- 59
Run Code Online (Sandbox Code Playgroud)

否则,assign就是你想要的.

  • 我同意.通常当人们认为他们想要动态命名变量时,他们真正想要的是不同的数据结构. (11认同)
  • +1(FAQ 7.21:http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f)很好地讨论了这个问题 (9认同)

小智 9

不要制作数据框.保留列表,命名其元素但不附加它.

这样做的最大原因是,如果你在旅途中制作变量,你几乎总是会不得不迭代它们中的每一个来执行有用的东西.在那里,您将再次被迫迭代您在运行中创建的每个名称.

命名列表的元素并遍历名称要容易得多.

就附加而言,它在R中的编程实践非常糟糕,如果你不小心会导致很多麻烦.


Mox*_*Mox 5

常见问题 说:

如果你有

varname <- c("a", "b", "d")
Run Code Online (Sandbox Code Playgroud)

你可以做

get(varname[1]) + 2
Run Code Online (Sandbox Code Playgroud)

为了

a + 2
Run Code Online (Sandbox Code Playgroud)

或者

assign(varname[1], 2 + 2)
Run Code Online (Sandbox Code Playgroud)

为了

a <- 2 + 2
Run Code Online (Sandbox Code Playgroud)

因此,当您想要评估使用变量(例如连接)的公式时,您可以使用 GET,当您想要为预先声明的变量赋值时使用 ASSIGN。

赋值的语法: assign(x, value)

x:变量名,以字符串形式给出。不进行强制转换,将使用长度大于 1 的字符向量的第一个元素,并带有警告。

值:要分配给 x 的值。