Ich möchte eine große Datentabelle in R LINE BY LINE streamen, und wenn die aktuelle Zeile eine bestimmte Bedingung hat (sagen wir, die ersten Spalten sind> 15), fügen Sie die Zeile zu einem Daten hinzu Rahmen im Speicher. Ich habe folgenden Code geschrieben:R - STDIN Zeile für Zeile lesen
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);
Aber ich bekomme den Fehler "Daten nicht verfügbar". Bitte beachten Sie, dass meine Daten groß sind und ich möchte nicht alles einmal lesen und meine Bedingung (in diesem Fall war es einfach) anwenden.
Sie können in den Antworten und Kommentare zu diesem q interessieren:? Http://stackoverflow.com/questions/9352887/strategies-for-reading-in-csv-files-in-pieces –
'see scan ','? readLines', 'nrows' Argument von' read.table', und sei dir bewusst, dass deine Lösung ** sehr ** langsam in R ist - kannst du Perl oder sogar awk zur Vorverarbeitung verwenden? –
Wie würde meine Antwort in Bezug auf Geschwindigkeit unterlegen? Im Wesentlichen öffne ich eine Datei und führe Linien davon aus, ohne die Datei zu schließen. –