在R中,循环遍历目录并在列中存储文件名

时间:2015-03-31 10:16:51

标签: regex 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)
}"

1 个答案:

答案 0 :(得分:1)

作为David Arenburg posted in the comments(但拒绝发布答案:D),解决方案是对文件使用apply函数。

lapply(files, basename

将输出list()。为方便起见,获得一个向量可能更好。在这种情况下,请使用sapply

sapply(files, basename)