是否可以即时创建新的变量名?
我想将列表中的数据帧读取到末尾带有数字的新变量中。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]])
在我看来,使用列表而不是使用orca1
,orca2
等可能会更好,...那么它将是orca[1]
, orca[2]
, ...
通常你会制作一个变量列表,只用一个数字来区分,因为这个数字是以后访问它们的方便方法。
orca <- list()
orca[1] <- "Hi"
orca[2] <- 59
否则,assign
这正是你想要的。
不要制作数据框。保留列表,命名其元素但不要附加它。
这样做的最大原因是,如果您在旅途中创建变量,几乎总是您以后必须遍历它们中的每一个以执行一些有用的事情。在那里,您将再次被迫遍历您在运行中创建的每个名称。
命名列表的元素并遍历名称要容易得多。
就 attach 而言,它在 R 中的编程实践非常糟糕,如果您不小心,可能会导致很多麻烦。
如果你有
varname <- c("a", "b", "d")
你可以做
get(varname[1]) + 2
为了
a + 2
或者
assign(varname[1], 2 + 2)
为了
a <- 2 + 2
因此,当您想要评估使用变量(例如连接)的公式时,看起来您使用 GET,而当您想要为预先声明的变量分配值时,您使用 ASSIGN。
Syntax for assign: assign(x, value)
x: a variable name, given as a character string. No coercion is done, and the first element of a character vector of length greater than one will be used, with a warning.
value: value to be assigned to x.
另一个棘手的解决方案是命名 list 的元素,attach
它:
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_name<-list()
for(i in 1:100){
paste("orca",i,sep="")->list_name[[i]]
}
它完美地工作。在您放置的示例中,第一行丢失,然后给您错误消息。