Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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
ReadText可以用来抓取关键字后的所有内容吗?_R_Vector_Text_Import - Fatal编程技术网

ReadText可以用来抓取关键字后的所有内容吗?

ReadText可以用来抓取关键字后的所有内容吗?,r,vector,text,import,R,Vector,Text,Import,我坦率地承认,我对R很陌生,所以我可能对如何使用这一点完全错误: 我有一些文本文件,它们只是在一天中收集程序的输出,每个文件一天。有时但并非总是,程序会抛出错误。我正在尝试的是一个R脚本,它将文本文件的特定部分导入到一个向量中,这样我就可以处理列出的错误。在本例中,[错误]之后的文本行。因此,如果我有: Normal Stuff [ERROR] Bad Error Normal Stuff Normal Stuff [ERROR] Minor Error Normal Stuff 我会以向量结

我坦率地承认,我对R很陌生,所以我可能对如何使用这一点完全错误:

我有一些文本文件,它们只是在一天中收集程序的输出,每个文件一天。有时但并非总是,程序会抛出错误。我正在尝试的是一个R脚本,它将文本文件的特定部分导入到一个向量中,这样我就可以处理列出的错误。在本例中,[错误]之后的文本行。因此,如果我有:

Normal Stuff
[ERROR] Bad Error
Normal Stuff
Normal Stuff
[ERROR] Minor Error
Normal Stuff
我会以向量结束

错误,小错误


然而,虽然我一直在学习教程,但在数据导入方面做这样的手术我几乎没有经验,因为我主要习惯于导入格式更精确的表。Readtext(或其他软件包)可以这样做吗?或者是一个更容易导入整个文件并通过字符串操作搜索/分割它的区域?

您可以在
readLines
的帮助下逐行读取文本,并使用
grep
返回其中包含
'Error'
的行。假设您的文件名为
'temp.txt'
,您可以执行以下操作:

grep('Error', readLines('temp.txt'), value = TRUE)
#[1] "[ERROR] Bad Error"   "[ERROR] Minor Error"
如果要删除初始的
'ERROR'
部分,可以使用
sub
获取:

sub('[ERROR] ', '', grep('Error', readLines('temp.txt'), value = TRUE), fixed = TRUE)
#[1] "Bad Error"   "Minor Error"
使用Raku(以前称为Perl6)

raku-ne'.put if.grep(m:i/Error/);'<~/R_Console.txt>tmp.txt
raku-ne'.put if.grep(m:i/Warning/);'<~/R_Console.txt>tmp.txt
raku-ne'.put if.grep(m:i/Error | Warning/);'~/R_Console.txt>tmp.txt

您可能需要考虑实现命令行技巧,以MunGE文本,并使用R为R是最好的-数字压缩和统计分析。

许多海报会告诉你学习BASH、SED、AWK或Perl(5),但我觉得你应该考虑尝试RUKU(PerL6的新名称),这是一个最初在2000年构思的项目。您可以使用上面三个一行程序中的任意一个返回1。错误,2。警告,3。错误或警告

这里有一些关于一行程序的提示。
-ne
命令行标志告诉Raku逐行接收输入。Perl系列语言理解称为
$的“topic\u变量”的概念,调用
.say
只是
$的缩写。say
(即“say the current topic”)。“
:i
”副词使
.grep
不区分大小写。您可以删除“
>tmp.txt
”重定向,以便输出打印到终端(或iTerm)控制台。最后,
.say
用于生成稍微缩写的输出(用于检查代码)
.say
可以替换为返回逐字输出的
.put

raku -ne '.put if .grep(m:i/ Error /);'    <  ~/R_Console.txt  > tmp.txt
raku -ne '.put if .grep(m:i/ Warning /);'  <  ~/R_Console.txt  > tmp.txt
raku -ne '.put if .grep(m:i/ Error | Warning /);' <  ~/R_Console.txt  > tmp.txt