1
state1 <- "CA"
state2 <- "IL"
state3 <- "FL"

CA、IL 和 FL 是三个数据帧。如何编写一个循环来使用 paste("state", i) 删除这些数据帧,其中 i 是一个整数?假设有许多这样的数据帧,因此将它们一一删除将是低效的。

4

4 回答 4

4

以下是方法,但您永远不必这样做:

CA <- data.frame()
IL <- data.frame()
FL <- data.frame()
ls()
[1] "CA" "FL" "IL"

rm(list=c("CA", "IL", "FL"))
ls()
character(0)

相反,您应该做的是将所有这些对象放在一个列表中,然后操作该列表:

states <- list(
  CA = data.frame(),
  IL = data.frame(),
  FL = data.frame()
)

str(states)
List of 3
 $ CA:'data.frame': 0 obs. of  0 variables
 $ IL:'data.frame': 0 obs. of  0 variables
 $ FL:'data.frame': 0 obs. of  0 variables

由于您的列表是单个对象,因此您可以使用简单的方法删除rm()

rm(states)
ls()
character(0)
于 2013-01-28T14:38:09.873 回答
3

如果您在字符向量中有数据框的名称,states那么您可以使用 rm(list=states)

现在有多种获取方式states

只需创建它并在创建新状态变量时对其进行更新。例如

CA <- data.frame()
states <- "CA"

IL <- data.frame()
states <- c(states, "IL")

FL <- data.frame()
states <- c(states, "FL")

或者

如果你在变量中有对象的名称,比如state1等等state2。那么你可以按照大卫的建议去做

states = sapply(paste("state", 1:2, sep=""), get)
rm(list = states)
于 2013-01-28T14:35:23.387 回答
2

可以像这样删除它们:

rm(list=sapply(paste("state", 1:50, sep=""), get))

但是,这是存储数据的不好方法(请参阅将数据保留在变量名之外)。更好的做法是将所有数据框保存为命名列表,以便您可以通过以下方式访问它们:

states[["CA"]]
states[["IL"]]

并使用以下命令一次性删除它们:

rm(states)
于 2013-01-28T14:35:32.293 回答
1

使用rmand get,但使用do.call,更优雅,因为我们操作指令列表。

我假设 N 是状态数。

do.call(rm,lapply(paste("state", 1:N, sep=""), get))
于 2013-01-28T14:51:53.767 回答