Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法强制data.table的fread()不停在空行上?_R_Data.table - Fatal编程技术网

有没有办法强制data.table的fread()不停在空行上?

有没有办法强制data.table的fread()不停在空行上?,r,data.table,R,Data.table,(问题不再相关,因为2016年11月25日新版本的数据。表-见下面接受的答案) 所以,我有一张中间有空线的桌子。当我试图用fread打开它时,它停止了,说在空行10006处停止了读取,但文本随后存在(丢弃)。有没有办法在不更改数据文件的情况下避免这种情况?您可以使用Windowsfindstr命令来清除空行 示例文件“Data.txt” 再现你的错误 > dt <- fread("Data.txt") Warning message: In fread("Data.txt") : S

(问题不再相关,因为2016年11月25日新版本的
数据。表
-见下面接受的答案)


所以,我有一张中间有空线的桌子。当我试图用
fread
打开它时,它停止了,说
在空行10006处停止了读取,但文本随后存在(丢弃)
。有没有办法在不更改数据文件的情况下避免这种情况?

您可以使用Windows
findstr
命令来清除空行

示例文件“Data.txt”

再现你的错误

> dt <- fread("Data.txt")
Warning message:
In fread("Data.txt") :
Stopped reading at empty line 6 of file, but text exists afterwards (discarded): 5,b
,于2016年11月25日发布,有一个新的
空行。跳过
选项可跳过空行

text <- "1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c"

library(data.table)
fread(text)
##    V1 V2
## 1:  2  b
## 2:  3  c
## 3:  4  a
## Warning message:
## In fread("1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c") :
##   Stopped reading at empty line 6 but text exists afterwards (discarded): 5,b

fread(text, blank.lines.skip=TRUE)
##    V1 V2
## 1:  1  a
## 2:  2  b
## 3:  3  c
## 4:  4  a
## 5:  5  b
## 6:  6  c

text如果其他人也有类似问题,我注意到data.table 1.10.4(我使用的当前2017版本)似乎会在某些文件中产生空行错误,如果您没有明确说明:

'strip.white = FALSE'

我正在查看我试图导入的350个文件中明显存在的行错误。在原件中,有些行在两行之间被打断,由于它们包含不同形式的信息,fread警告某些列存在类强制问题。但我同时得到了几乎每个文件的“空行”错误,在不同的行上。我在记事本++中手动检查了这些。很多次。没有空行,也有剩余的行;很多。尝试使用导入参数并禁用strip.white删除了空行警告。

您使用的是什么操作系统?在*nix上,你只需结合一个命令行命令就可以过滤掉空行。当然,应该可以在这里找到类似的命令来执行相同的过滤,但我仍然好奇是否有更聪明的方法……我认为答案是“不”。您可能应该提交一个功能请求:。如果你安装cygwin工具,你可以
egrep-v^$
去除空行…@BenBolker我已经安装了
GoW
()软件包,我非常喜欢它,因为它安装起来非常简单,重量也非常轻。并包括最常见的
*nix
命令行工具。根据
fread()
(1.8.10)的帮助文件的详细信息部分,这是预期的行为。如果数据相对较小,则始终可以将其作为文本字符串读入,使用R的regexp函数对其进行处理以删除空行,然后将字符串作为
input=
参数传递给
fread()
。我遇到了一个非常类似的问题-fread在一个行索引中抛出一个空行错误,当我检查文件时,这显然是错误的。似乎没有任何通用的解决方案。尝试启用和禁用“填充”。“修复”我的一些导入或创建其他错误。所有引起问题的文件都来自FDA,应该是相同的。read.table通常(缓慢)导入它们。我尝试了write.table,然后用fread重新导入,但“空行”仍然存在。还尝试更改它们的引号、分隔符,在read.table之后“修剪”表格,以确保没有任何额外的分隔符&在write.table之前删除空行,添加显式NA并更改行尾。fread.blank.lines.skip选项对我无效,错误仍然存在。使用select选项选择要加载的特定列似乎可以忽略空行。例如,select=c(1,2,3)加载前3列,当我使用select时,我没有得到错误,如果我使用select,则加载超过错误点;如果在导入时选择特定字段,则在尝试导入整个表时会出现问题。我从未真正解决过为什么会发生这种情况,即使在进行了一些相当密集的手动检查(例如检查行尾、全部删除、重新添加行尾)之后,我仍然发现了这个问题。奇怪的是,r的基本“read.table”函数可以很好地处理相同的文件,这表明它一定和fread中的错误检查有关。我现在不知道是什么导致了这个错误。
text <- "1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c"

library(data.table)
fread(text)
##    V1 V2
## 1:  2  b
## 2:  3  c
## 3:  4  a
## Warning message:
## In fread("1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c") :
##   Stopped reading at empty line 6 but text exists afterwards (discarded): 5,b

fread(text, blank.lines.skip=TRUE)
##    V1 V2
## 1:  1  a
## 2:  2  b
## 3:  3  c
## 4:  4  a
## 5:  5  b
## 6:  6  c
'strip.white = FALSE'