我尝试打开工作目录中的所有csv文件,并将所有表读入一个大的数据框列表。我在stackoverflow上找到了类似的解决方案,解决方案可行。代码是:
load_data <- function(path)
{
files <- dir(path, pattern = '\\.csv', full.names = TRUE)
tables <- lapply(files, read.csv)
do.call(rbind, tables)
}
pollutantmean <- load_data("specdata")
然而,我对某些步骤感到困惑。如果我删除或省略do.call(rbind,tables),我无法通过调用tables [index] $ variable来访问列变量。它在控制台中返回NULL。然后我尝试通过调用表[index]打印输出,我没有看到任何列变量&#39;名称出现在表格的第一行。有人可以向我解释一下导致列变量的原因吗?名称缺失并返回NULL值?
答案 0 :(得分:1)
要了解您获得NULL
的原因,请创建一个可重现的示例:
df1 <- head(mtcars)
df2 <- head(iris)
my_list <- list(df1, df2)
使用一个括号和两个括号测试子集:
my_list[2]$Species
NULL
my_list[[2]]$Species
[1] setosa setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica
使用两个括号进行子集会产生所需的输出。
进一步说明
为什么一个支架不起作用?
> my_list[2]
# [[1]]
# 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
> my_list[[2]]
# 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
如果有人无法区分这两个输出,我不会责怪他们,他们看起来很像。使用一个支架和两个支架之间有一个小的重要区别。第一个返回一个列表,第二个返回一个数据帧。要检查,请注意[[1]]
输出第一行中的my_list[2]
。这表明输出是一个列表。作为列表,我们无法像数据框一样分析它。我们必须使用这两个括号来取回数据框。