2015-03-31 39 views
1

我想在R中做些什麼,我認爲不應該太難。我有一個包含許多文件的文件夾。他們都是這樣的。在R中,遍歷目錄和存儲文件名在列

airbag.WS-U-E-A.lst 

.是一個分隔符,.lst是擴展(如可讀文本)。

每個文件包含每行數據,如

/home/nobackup/SONAR/COMPACT/WR-U-E-A/WR-U-E-A0000075.data.ids.xml: <sentence>ja voor den airbag op te pompen eh :p</sentence> 
/home/nobackup/SONAR/COMPACT/WR-U-E-A/WR-U-E-A0000129.data.ids.xml: <sentence>Dobby , als ze valt heeft ze dan wel al ne airbag hee</sentence> 

我想要做的是,R中創建一個包含所有文件數據的新的數據集。理想情況下,應該是這樣的:

ID | filename    | word | component | left-context        | right-context 
--------------------------------------------------------------------------------------- 
1 airbag.WS-U-E-A.lst airbag WS-U-E-A ja voor den         op te pompen eh :p 
2 airbag.WS-U-E-A.lst airbag WS-U-E-A Dobby , als ze valt heeft ze dan wel al ne hee 

生成所有的內容是什麼,我應該能夠做我自己有對文件的一些正則表達式,但我不完全知道如何循環中的所有文件。例如,我會從文件名的正則表達式函數中獲取組件和單詞信息,但是如何將每個文件的文件名存儲在列中?

我嘗試以下

files <- list.files(path="", pattern="*.lst", full.names=T, recursive=FALSE) 
lapply(files, function(x) { 
    t <- dirname(x) 
    out <- function(t) 
}) 

t 

但返回的錯誤是

Error: unexpected '}' in: 
"out <- function(t) 
}" 
+0

什麼是'out < - function(t)'在做什麼?你沒有爲它定義任何funkuanality。 – 2015-03-31 10:19:49

+0

其實你不需要在這裏定義任何函數,只需'lapply(files,dirname)'應該做的。 – 2015-03-31 11:08:19

+0

@DavidArenburg我把這個函數分配給t,並回顯t,如下所示: 'files < - list.files(pattern =「*。lst」,full.names = T,recursive = FALSE) t < - lapply (文件,dirname) t'然而,回聲是空的。或者至少,echo包含337個值(等於文件數量),它們都是'「。」'而不是文件名。 – 2015-03-31 11:16:36

回答

1

由於David Arenburg posted in the comments(但拒絕張貼作爲一個答案:d),解決的辦法是在使用apply功能文件。

lapply(files, basename

其將輸出一個list()。爲了方便起見,獲取矢量可能會更好。在這種情況下,請使用sapply

sapply(files, basename)