访问R

时间:2015-10-18 13:20:55

标签: r csv

我尝试打开工作目录中的所有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值?

1 个答案:

答案 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]。这表明输出是一个列表。作为列表,我们无法像数据框一样分析它。我们必须使用这两个括号来取回数据框。