2015-10-18 30 views
3

我尝试打开我的工作目录中的所有csv文件,并将所有表读入大量数据框。我在stackoverflow上找到了一个类似的解决方案,解决方案工作。代码是:访问R中的数据帧中的变量

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。然后我尝试通过调用tables [index]来打印输出,并且没有看到列表中第一行出现任何列变量的名称。有人可以向我解释是什么导致列变量的名称丢失并返回NULL值吗?

+2

使用两个括号'[['用于这种方式的索引。单支架返回一个列表。 –

回答

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 

如果有人不能分辨两个输出之间的差异,我不会责怪他们,他们看起来很像。使用一个支架和两个支架有一个小的重要区别。第一个返回一个列表,第二个返回一个数据框。要检查,请注意my_list[2]输出的第一行中的[[1]]。这表明输出是一个列表。作为一个列表,我们不能像数据框那样分析它。我们必须使用两个括号来取回数据框。