我有一个数据帧列表,如下所示:
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
谢谢!
答案 0 :(得分:3)
Data.frame没有“名称”。变量可以指向data.frame,但data.frame可以完全不带名称存在(例如,您进行过x <- list(data.frame(x), data.frame(y))
)。因此,您的data.frame没有命名为df1
; df1
是一个恰好指向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]))
}
这会打印出列表中数据框的名称。