我有一些管道分隔的文件,一些非常大(许多GB),有缺陷。有人错误地遗漏了一个字段和一个分隔符,但仅限于某些行。
我想使用read_lines
将每个文件作为字符串向量读取,然后应用count.fields
(这是否有一个tidyverse版本?)将行分成两个字符串向量按令牌数量。 (我必须删除其中一个向量中的最后一个字符串)。在完成所有操作之后,我想使用read_delim
两次来解析具有不同数量的分隔符的行集。如何在没有任何修改的情况下欺骗read_delim
来读取每个字符串向量?或者是我编写新临时文件然后使用read_delim
?
read_delim
的在线帮助说:“文件”可以是文字,但“必须包含至少一个新行才能被识别为数据(而不是路径)。”
“粘贴”可以添加换行符(如下所示),但为什么我需要这样做来欺骗read_delim
来读取文字数据而不是路径?为什么不向read_delim
添加一个参数,以便以字符串向量的形式读取文字数据?
我想传递targetSet字符串向量,但read_delim
需要换行符:
d <- read_delim(paste(targetSet, collapse="\n"), delim="|",
col_types=cols(.default="c"))
这适用于具有100,000条记录的文件,但粘贴失败,其中一个文件大约有1.6亿条记录:
粘贴错误(targetSet,collapse =“\ n”):结果会超出 2 ^ 31-1个字节
我使用的是64位R,所以我不明白这个消息。我正在使用的Linux机器上应该有几十GB的内存。
是否有一个技巧让read_delim
从read_lines读取修改后的字符串向量?是否有textConnection
的整齐版本?
答案 0 :(得分:1)
看一下console
中的paste
源代码,我们找到两行
if(pwidth&gt; INT_MAX)
错误(_(&#34;结果将超过2 ^ 31-1个字节&#34;));
所以paste.c
检查粘贴的字符串的长度是否为paste
,如果不是则返回错误。
R有一个<= INT_MAX
和一个LONG_INT_MAX
,后者是一个32位整数,因此可以有一个最大值INT_MAX
(符号一位),对应于21亿。
似乎2^31 - 1
超出了字符数限制。