2015-05-22 86 views
2

我對R相對比較陌生,並且在使用apply函數從目錄讀取多個表時出現問題。我想要的功能是使用一個帶有我感興趣的表的路徑的向量,並生成一個由每個數據框組成的對象的列表,該列表對應於該文件中的路徑。我已經寫了下面的代碼:如何使用apply函數將多個數據表讀入R?

f<- function(directory){ 
    file.list <<- list.files(directory) 
    file.paths <<- as.vector(paste(directory, file.list, sep = "/")) 
    tables <- lapply(X = file.paths, FUN = read.table, header = TRUE,sep = "\t")) 
} 

按照我的理解,我在做什麼是創造我想要的目錄文件名列表,創建這些文件的路徑,並(在我m失敗是)遍歷這些路徑並導入它們對應於整個file.paths對象的表並使用這些表生成一個列表。我收到以下錯誤:

Error in FUN(X[[i]], ...) : no lines available in input 

任何人都可以提供任何建議嗎?

+3

如果您的數據爲空,則可能會發生這種情況...因爲沒有任何數據行 – user20650

+0

您的功能看起來不錯,但是不要wa nt它返回「表」? – C8H10N4O2

+0

是的 - 對不起,該部分沒有寫入,只是認爲我會先修復錯誤,因爲它意味着它不能創建表開始 – sam

回答

6

這裏有幾個選項,這取決於你想要的輸出是什麼:

數據的列表框

# Load library 
    library(data.table) 

# Get a List of all files named with a key word, say all `.csv` files 
    filenames <- list.files("C:/your/folder", pattern="*.csv", full.names=TRUE) 

# Load data sets 
    list.DFs <- lapply(filenames,fread) 

我假設你的數據文件都保存在.csv格式。需要注意的是fread相當於read.table但更快得多

綁定多個數據幀到一個單一數據幀

# Get a List of all files named with a key word, say all `.csv` files 
    filenames <- list.files("C:/your/folder", pattern="*.csv", full.names=TRUE) 

# Load and bind all data sets 
    data <- rbindlist(lapply(filenames,fread)) 

加載多個數據幀作爲不同的對象全球環境

# Get a List of DF in the directory 
    filenames <- list.files("C:/your/folder", pattern="*.Rda", full.names=TRUE) 

# Load data sets 
    lapply(filenames, load, .GlobalEnv) 
相關問題