如何使用for循环打印列表中数据框的名称?

时间:2018-11-09 16:31:04

标签: r list loops for-loop dataframe

我有一个数据帧列表,如下所示:

x <- c(1, 2, 3, 4, 5)
y <- c(5, 4, 3, 2, 1)
df1 <- data.frame(x)
df2 <- data.frame(y)
x <- list(df1, df2)

我想使用如下所示的for循环来打印列表x中的数据帧的名称:

for (i in x) {
  deparse(substitute(x[i]))
}

但是它不起作用。我的目标是将数据框的名称打印为如下字符:

[1] df1
[2] df2

谢谢!

2 个答案:

答案 0 :(得分:3)

Data.frame没有“名称”。变量可以指向data.frame,但data.frame可以完全不带名称存在(例如,您进行过x <- list(data.frame(x), data.frame(y)))。因此,您的data.frame没有命名为df1df1是一个恰好指向data.frame的变量名。

如果将变量放置在列表中,则变量的值将放置在列表中,而不是变量名称本身。因此,如果要在列表中保留最初保存对象的变量的名称,则需要将名称存储在列表中。一种常见的方法是

x <- list(df1=df1, df2=df2)

然后,您可以使用names(x)设置名称。如果要查看其他创建保留对象名称的列表的方法,请参见现有问题:Can lists be created that name themselves based on input object names?

答案 1 :(得分:0)

有一些非常有用的要点:使用x <- list(df1=df1, df2=df2)将数据帧的名称保存在列表中,并使用names()函数。这是我用来明确打印列表中数据框名称的代码:

x <- c(1, 2, 3, 4, 5)
y <- c(5, 4, 3, 2, 1)
df <- data.frame(x, y)
df1 <- data.frame(x)
df2 <- data.frame(y)
x <- list(df1=df1, df2=df2)
for (i in 1:2) {
print(as.character(names(x)[i]))
}

这会打印出列表中数据框的名称。