Quiero transmitir una tabla de datos grandes en R LINE BY LINE, y si la línea actual tiene una condición específica (digamos que las primeras columnas son> 15), agregue la línea a un dato marco en la memoria. He escrito el código siguiente:R - Leer STDIN línea por línea
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);
Pero me sale el error "datos no disponibles". Tenga en cuenta que mis datos son grandes y no quiero leerlos todos una vez y aplicar mi condición (en este caso fue fácil).
Usted puede estar interesado en las respuestas y los comentarios de esta q:? Http://stackoverflow.com/questions/9352887/strategies-for-reading-in-csv-files-in-pieces –
véase 'escanear ','? readLines', 'nrows' argumento de' read.table', y tenga en cuenta que su solución será ** muy ** lenta en R - ¿puede usar Perl, o incluso awk, para preprocesar? –
¿Cómo le iría a mi respuesta a continuación en términos de velocidad? En esencia, abro un archivo y sigo extrayendo líneas de él sin cerrar el archivo. –