使用fread出现文件未找到错误

3

我有一些基本的代码,用于从一个文件夹中读取多个共享相同文件格式的文件。这些文本文件每个都包含一两个句子;没有列、标题或其他任何东西。

最初我使用read.table来实现这个功能,但在阅读一些资料后,特别是查看了这篇最近的帖子之后,我想看看是否可以使用fread使事情变得更快一点。

library(data.table)

files <- list.files(path = "C:/Documents", pattern = "*.txt")

readdata <- function(x)
{
    mydata <- fread(x, sep=" ")
    return(mydata)
}

all.files <- lapply(files, readdata)
final.data <- rbindlist(all.files)

当我运行这段代码时,我会得到以下错误信息:
Error in fread(x, sep = " ") : File not found: 1.txt

1.txt是该文件夹中的第一个文件。有人能解释一下为什么吗?路径文件夹是正确的(我把上面的内容改成通用的放在这里),所以我似乎看不出问题在哪里。


你设置了 setwd("C:/Documents") 吗? - Sven Hohenstein
是的。我刚刚尝试了getwd(),它显示了你所写的内容。 - user1988898
1个回答

5

您需要指定文件的路径:

path <- "C:/Documents"

readdata <- function(x)
{
  f <- file.path(path, x)
  mydata <- fread(f, sep=" ")
  return(mydata)
}

另一个选项是使用带有参数full.names = TRUElist.files。这将返回文件名和它们的路径。
files <- list.files(path = "C:/Documents", pattern = "*.txt", full.names = TRUE)

readdata <- function(x)
{
    mydata <- fread(x, sep=" ")
    return(mydata)
}

@agstudy 同意。我尽量保持对原始代码的更改数量最少。 - Sven Hohenstein
谢谢您的回复。我会尝试您所写的并看看哪个有效。 - user1988898
好的,一方面你写的代码确实可以运行(非常感谢 - 看着某些东西看了很久却似乎没有任何进展真是愚蠢)。我现在唯一的问题是,我遇到了以下错误:提供的“sep”在第15行未找到。要将文件读取为单个字符列,请设置sep ='\n'。所以我这样做了(我认为分隔符应该是空格?),然后我得到了这个错误:mmap'd区域在结尾处有EOF。此外:有50个或更多警告(使用warnings()查看前50个)。谢谢你的帮助 - 我会尝试自己解决这个问题。 - user1988898
@SvenHohenstein这样更好,只要不为fread设置sep分隔符即可,通常它会尝试猜测最佳分隔符。 - agstudy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接