104

是否可以即时创建新的变量名?

我想将列表中的数据帧读取到末尾带有数字的新变量中。orca1、orca2、orca3 之类的东西……

如果我尝试类似

paste("orca",i,sep="")=list_name[[i]]

我收到这个错误

target of assignment expands to non-language object

还有其他方法吗?

4

6 回答 6

131

使用assign

assign(paste("orca", i, sep = ""), list_name[[i]])
于 2010-04-20T23:03:26.350 回答
35

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

通常你会制作一个变量列表,只用一个数字来区分,因为这个数字是以后访问它们的方便方法。

orca <- list()
orca[1] <- "Hi"
orca[2] <- 59

否则,assign这正是你想要的。

于 2010-04-21T00:11:32.463 回答
11

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

这样做的最大原因是,如果您在旅途中创建变量,几乎总是您以后必须遍历它们中的每一个以执行一些有用的事情。在那里,您将再次被迫遍历您在运行中创建的每个名称。

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

就 attach 而言,它在 R 中的编程实践非常糟糕,如果您不小心,可能会导致很多麻烦。

于 2013-10-07T13:21:11.093 回答
5

常见问题解答 说:

如果你有

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.

于 2018-04-04T22:01:14.557 回答
0

另一个棘手的解决方案是命名 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
于 2010-04-21T09:33:41.410 回答
0

还有这个选项?

list_name<-list()
for(i in 1:100){
    paste("orca",i,sep="")->list_name[[i]]
}

它完美地工作。在您放置的示例中,第一行丢失,然后给您错误消息。

于 2016-10-27T19:06:29.537 回答