【发布时间】:2018-08-19 02:45:11
【问题描述】:
我正在处理目录中的所有文件,我想获取文件名的元数据,将其保存在数据框中,然后在处理完目录后最终将数据框加载到 RSQLite 表中。
参考:https://stackoverflow.com/a/51913491/9410024 可能还有https://stackoverflow.com/a/45522323/9410024
我不明白警告消息以及文件名未加载到数据框中的原因:
setwd('C://tst//')
df <- data.frame("filename"= character(0), stringsAsFactors=FALSE)
for (fn in Sys.glob("tst*.dat")) {
print(fn)
df[nrow(df) + 1,] = list(fn)
}
输出:
[1] "tst1.dat"
[1] "tst2.dat"
[1] "tst3.dat"
Warning messages:
1: In `[<-.data.frame`(`*tmp*`, nrow(df) + 1, , value = list("tst1.dat")) :
replacement element 1 has 1 row to replace 0 rows
2: In `[<-.data.frame`(`*tmp*`, nrow(df) + 1, , value = list("tst2.dat")) :
replacement element 1 has 1 row to replace 0 rows
3: In `[<-.data.frame`(`*tmp*`, nrow(df) + 1, , value = list("tst3.dat")) :
replacement element 1 has 1 row to replace 0 rows
> dfrun
[1] filename
<0 rows> (or 0-length row.names)
>
【问题讨论】:
-
您需要首先创建一个数据框,其中包含您最终将拥有的行数。您不能以您尝试这样做的方式增长数据框,因此警告您试图用长于零的东西替换空的东西(长度为零)。此外,您使用的代码会做一些非常奇怪的事情——您可能想要
<- fn而不是<- list("fn")。 -
这似乎与第一个参考不一致,我无法知道可能有多少文件。编辑以删除 fn 周围的双引号(剩余的调试代码)。
-
你会的。首先调用
Sys.glob("tst*.dat")来确定文件的数量,用它来构建空数据框,然后循环它。 -
原始代码现在可以正常工作 - 不知道发生了什么。