Voglio trasmettere una grande tabella di dati in R LINE BY LINE e se la riga corrente ha una condizione specifica (diciamo che le prime colonne sono> 15), aggiungi la linea a un dato cornice nella memoria. Ho scritto il seguente codice:R - Lettura STDIN riga per riga
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);
Ma ho ricevuto l'errore "dati non disponibili". Si prega di notare che i miei dati sono grandi e non voglio leggere tutto in una volta e applicare la mia condizione (in questo caso è stato facile).
Potreste essere interessati alle risposte e commenti su questo q:? Http://stackoverflow.com/questions/9352887/strategies-for-reading-in-csv-files-in-pieces –
vedere 'scansione ','? readLines', argomento 'nrows' di' read.table', e sii consapevole che la tua soluzione sarà ** very ** slow in R - puoi usare Perl, o anche awk, per pre-processare? –
Come sarebbe la mia risposta in basso in termini di velocità? In sostanza apro un file e continuo a estrarre le righe da esso senza chiudere il file. –