是否可以即时创建新的变量名?
我想将列表中的数据帧读取到末尾带有数字的新变量中。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]]
}
它完美地工作。在您放置的示例中,第一行丢失,然后给您错误消息。