【发布时间】:2012-04-09 21:47:54
【问题描述】:
我想将大数据表逐行流式传输到 R 行,如果当前行具有特定条件(假设第一列 >15),则将该行添加到内存中的数据帧中。我写了以下代码:
count<-1;
Mydata<-NULL;
fin <- FALSE;
while (!fin){
if (count==1){
Myrow=read.delim(pipe('cat /dev/stdin'), header=F,sep="\t",nrows=1);
Mydata<-rbind(Mydata,Myrow);
count<-count+1;
}
else {
count<-count+1;
Myrow=read.delim(pipe('cat /dev/stdin'), header=F,sep="\t",nrows=1);
if (Myrow!=""){
if (MyCONDITION){
Mydata<-rbind(Mydata,Myrow);
}
}
else
{fin<-TRUE}
}
}
print(Mydata);
但我收到“数据不可用”错误。 请注意,我的数据很大,我不想一次读取所有数据并应用我的条件(在这种情况下很容易)。
【问题讨论】:
-
您可能对此q的答案和cmets感兴趣:stackoverflow.com/questions/9352887/…
-
请参阅
?scan、?readLines、nrowsread.table的参数,并注意您的解决方案在 R 中会非常慢 - 你可以使用Perl,甚至 awk,进行预处理? -
我的回答在速度方面如何?本质上,我打开一个文件并继续从中提取行而不关闭文件。
-
请注意我要逐行读取数据。我的问题是如何告诉 R 数据正在流入并且应该逐行接收。这在 Perl 中也很容易,但我一直在寻找一种在 R 中实现的方法。