2015-03-31 89 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