2015-03-31 122 views
0

我已使用此搜索框並已找到similar questions,但不是相同的。看起來這是一個容易的問題,雖然(我是R-newbee)。在R中填充空數據框

我只是試圖創建一個新的數據框,併爲其添加值。毫不奇怪,R會拋出一個錯誤,指出行不匹配。

下面的代碼

d <- data.frame() 

files <- list.files(pattern="*.lst", full.names=T, recursive=FALSE) 
d$fileName <- lapply(files, basename) 
d$node <- gsub("([^.]+)\.[^\.lst]+\.lst", "$1", d$fileName, perl=TRUE) 

而這裏的誤差

錯誤$<-.data.frame*tmp*, 「文件名」,值= 列表( 「A-bom.WR-PEA.lst」 ,:更換有337行,數據有0

我該如何解決這個問題?我想過填充d與行數相同的文件,但我不認爲這是最好的方式?

+0

什麼是'basename'? – 2015-03-31 11:48:09

+0

@TimBiegeleisen請參閱[文檔](https://stat.ethz.ch/R-manual/R-devel/library/base/html/basename.html)和[this comment](http://stackoverflow.com /問題/ 29366186 /在-R-環路目錄和店內文件名,在列#註釋-46916669)。 – 2015-03-31 11:50:10

回答

1

只需在第一次使用時創建數據框,因此您不會將行「添加」到零行的數據框。您可以使用sapply來返回(命名)向量而不是列表。

files <- list.files(pattern="*.lst", full.names=T, recursive=FALSE) 
d <- data.frame(fileName = unname(sapply(files, basename))) 
d$node <- gsub("([^.]+)\\.[^\\.lst]+\\.lst", "$1", d$fileName, perl=TRUE) 

你的正則表達式中導致了錯誤,但是,我沒那麼熟悉的正則表達式,所以你可能要解決我的修正;-)

+0

啊,是的,這個工程。謝謝! (顯然'gsub'不能處理捕獲組,所以這就是問題所在,現在修復了。) – 2015-03-31 12:06:34