R 如何动态命名变量?
是否可以动态创建新的变量名 我想把列表中的数据帧读入新的变量,并在末尾加上数字。像orca1,orca2,orca3之类的东西 如果我尝试像R 如何动态命名变量?,r,assign,r-faq,R,Assign,R Faq,是否可以动态创建新的变量名 我想把列表中的数据帧读入新的变量,并在末尾加上数字。像orca1,orca2,orca3之类的东西 如果我尝试像 paste("orca",i,sep="")=list_name[[i]] 我得到这个错误 target of assignment expands to non-language object 还有其他方法吗?使用assign: assign(paste("orca", i, sep = ""), list_name[[i]]) 在我看来,与使用o
paste("orca",i,sep="")=list_name[[i]]
我得到这个错误
target of assignment expands to non-language object
还有其他方法吗?使用
assign
:
assign(paste("orca", i, sep = ""), list_name[[i]])
在我看来,与使用
orca1
、orca2
等相比,使用列表可能更好。。。然后是orca[1]
,orca[2]
通常情况下,你会制作一个变量列表,除了一个数字外别无其他,因为这个数字是以后访问它们的方便方式
orca <- list()
orca[1] <- "Hi"
orca[2] <- 59
orca另一个棘手的解决方案是命名列表中的元素并附加它:
list_name = list(
head(iris),
head(swiss),
head(airquality)
)
names(list_name) <- paste("orca", seq_along(list_name), sep="")
attach(list_name)
orca1
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
list\u name=list(
头部(虹膜),
总干事(瑞士),
总目(空气质素)
)
名称(列表名称)不生成数据帧。保留列表,命名其元素,但不要附加它
这样做的最大原因是,如果您在运行中创建变量,那么以后几乎总是需要遍历每个变量来执行有用的操作。在那里,您将再次被迫遍历您动态创建的每个名称
命名列表中的元素并遍历这些名称要容易得多
就attach而言,它在R中的编程实践非常糟糕,如果不小心,可能会导致很多麻烦。这个选项呢
list_name<-list()
for(i in 1:100){
paste("orca",i,sep="")->list_name[[i]]
}
list\u name list\u name[[i]]
}
它工作得很好。在您输入的示例中,第一行缺失,然后给出错误消息。
如果你有
varname <- c("a", "b", "d")
为了
或
为了
我同意。通常,当人们认为他们想要动态命名变量时,他们真正想要的是一个不同的数据结构。+1(FAQ 7.21:)对此进行了很好的讨论。只要我们给出r-FAQ标签,我们就给链接(FAQ 7.21:)一些技巧,但不是明智的。如果答案是attach
,您通常会问错误的问题……这就是如何做到这一点。这里有一个元问题,“我应该这样做吗?”答案几乎总是“不”。列表中的命名元素几乎总是首选的。答案几乎总是“否”,除非它不是。但是大多数寻求这个答案的人并不是因为拒绝了他们应用程序的列表而这样做的。@Ari B.Friedman I为保存在mypackage/data中的数据集生成变量名。文件中的每个文件都具有相同的文件名和其中的数据(对于包中的数据给出了R建议)。每个数据集大约有10万个,总数约为17个。我几乎看不到其他方法。您为什么不使用paste0
?这并没有解决OP的问题。我们有一个包含数据帧的列表,我们希望将其分配给数据帧,命名为orca1、orca2等。“包含数据帧的列表”=“数据帧列表”?因此,只在通过列表进行迭代之后,才进行附加?
get(varname[1]) + 2
a + 2
assign(varname[1], 2 + 2)
a <- 2 + 2