2015-10-18 70 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]]。這表明輸出是一個列表。作爲一個列表,我們不能像數據框那樣分析它。我們必須使用兩個括號來取回數據框。