gpt4 book ai didi

R - 逐行读取 STDIN

转载 作者:行者123 更新时间:2023-12-04 01:00:53 25 4
gpt4 key购买 nike

我想将大数据表流式传输到 R LINE BY LINE,如果当前行具有特定条件(假设第一列 > 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);

但我收到错误“数据不可用”。
请注意,我的数据很大,我不想一次全部阅读并应用我的条件(在这种情况下很容易)。

最佳答案

我认为使用像 readLines 这样的 R 函数会更明智。 . readLines仅支持读取指定数量的行,例如1. 结合打开 file先连接,再调用readLines反复得到你想要的。调用readLines时多次,下一个 n从连接中读取行。在 R 代码中:

stop = FALSE
f = file("/tmp/test.txt", "r")
while(!stop) {
next_line = readLines(f, n = 1)
## Insert some if statement logic here
if(length(next_line) == 0) {
stop = TRUE
close(f)
}
}

补充评论:
  • R 有一种将标准输入视为文件的内部方式:stdin() .我建议你使用这个而不是使用 pipe('cat /dev/stdin') .这可能使它更健壮,而且肯定更跨平台。
  • 你初始化 Mydata一开始并使用 rbind 继续增长它.如果你的行数rbind变大,这将变得非常慢。这与以下事实有关:当对象增长时,操作系统需要为它找到一个新的内存位置,这最终会占用 。很多的时间。更好的是预先分配MyData ,或使用应用样式循环。
  • 关于R - 逐行读取 STDIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9871307/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com