【问题标题】:File not found using fread使用 fread 找不到文件
【发布时间】:2016-04-05 14:48:47
【问题描述】:

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

我最初使用 read.table 来执行此操作,但在进行了一些阅读之后,特别是查看了 this recent post,我想我是否可以使用 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")了吗?
  • 是的。我现在刚刚尝试了 getwd() ,它表明你写了什么。

标签: r data.table


【解决方案1】:

你必须指定文件的路径:

path <- "C:/Documents"

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

另一种选择是将list.files 与参数full.names = TRUE 一起使用。这将返回文件名及其路径。

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

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

【讨论】:

  • @agstudy 同意。我尽量减少对原始代码的更改次数。
  • 感谢您的回复。我会试试你写的东西,看看有什么效果。
  • 好吧,一方面你写的东西确实有效(非常感谢 - 我可以盯着某样东西看多长时间但似乎什么也没有,这很愚蠢)。我现在唯一的问题是我被抛出以下错误:在第 15 行找不到提供的“sep”。要将文件作为单个字符列读取,请设置 sep='\n'。所以我这样做了(我认为分隔符应该是空格?)然后我得到这个错误:mmap'd region has EOF at the end 另外:有 50 个或更多警告(使用 warnings() 查看前 50 个) .感谢您的帮助 - 我会自己尝试解决这个问题。
  • @SvenHohenstein 更好,只是不需要为fread 设置sep,通常它会尝试猜测最好的一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多