2013-01-20 23 views
19

Ich schreibe eine R-Funktion, die ein Verzeichnis voller Dateien liest und die Anzahl der vollständig beobachteten Fälle in jeder Datei meldet. Die Funktion gibt einen Datenrahmen zurück, wobei die erste Spalte den Namen der Datei und die zweite Spalte die Anzahl der vollständigen Fälle angibt.Fehler in der Datei (Datei, "rt"): ungültiges 'description' Argument in complete.cases Programm

wie

id nobs 
1 108 
2 345 
... 
etc 

Hier ist die Funktion, die ich schrieb:

complete <- function(directory, id = 1:332) { 

    for(i in 1:332) { 
    path<-paste(directory,"/",id,".csv",sep="") 
    mydata<-read.csv(path) 
    #nobs<-nrow(na.omit(mydata)) 
    nobs<-sum(complete.cases(mydata)) 
    i<-i+1 
    } 

    completedata<-c(id,nobs) 
} 

I führen Sie die Funktion:

complete("specdata",id=1:332) 

aber ich bekomme diese Fehlermeldung:

Error in file(file, "rt") : invalid 'description' argument 

Ich habe auch versucht die traceback() Funktion mein Code zu debuggen und es gibt diese Ausgabe:

traceback() 
# 4: file(file, "rt") at #6 
# 3: read.table(file = file, header = header, sep = sep, quote = quote, 
# dec = dec, fill = fill, comment.char = comment.char, ...) at #6 
# 2: read.csv(path) at #6 
# 1: complete("specdata", id = 1:332) 

Antwort

26

Es ist schwer, ohne vollständig reproduzierbar Beispiel zu sagen, aber ich vermute, Ihr Problem ist diese Linie:

path<-paste(directory,"/",id,".csv",sep="") 

id Hier ist ein Vektor, also Pfad wird ein Vektor von Zeichenketten, und wenn Sie read.csv aufrufen, übergeben Sie es alle Pfade auf einmal statt nur einer. Versuchen Sie, die obige Zeile zu ändern

path<-paste(directory,"/",id[i],".csv",sep="") 

und sehen, ob das funktioniert.

+1

danke Jonathan für Ihre schnelle und schnelle Antwort. Es löste den Fehler. –

5

Es scheint, dass Sie ein Problem mit Ihrem Dateipfad haben. Sie übergeben die vollständige Vektor-ID = c (1: 332) an den Dateipfadnamen. Wenn Ihre Dateien 1.csv genannt, 2.csv, 3.csv, etc ..
Sie diese Zeile ändern können:

path<-paste(directory,"/",id,".csv",sep="") 

zu

path<-paste(directory,"/",i,".csv",sep="") 

und auslassen oder Nacharbeit der ID-Eingabe Ihrer Funktion.

+0

Danke Nathan, dass er mir geholfen hat, das Problem zu lösen, und mich verstehen ließ, wo ich Fehler gemacht habe. –

2

Anstatt for zum Einlesen der Daten zu verwenden, können Sie versuchen . Zum Beispiel

mydata <- sapply(path, read.csv) .

Seit path ist ein Vektor, sapply den Vektor und gelten read.csv es iterieren. Daher wird es keine Notwendigkeit für die for Schleife und Ihr Code wird viel sauberer sein.

Von dort haben Sie eine matrix welche jede Ihrer Dateien und ihre jeweiligen Informationen, aus denen Sie die Beobachtungen extrahieren können.

Um die Beobachtungen zu finden, können Sie mydata[2,1][[1]] tun. Denken Sie daran, dass die Zeilen Ihre Faktoren sind und Ihre Spalten Ihre Dateien sind.

1

Ich arbeite an dem genauen Problem ..Dateinamen im Verzeichnis "specdata" werden mit 001.csv und 002.csv .... 099.csv bis zur Datei 332.csv benannt. Wenn Sie jedoch id = 1 aufrufen, wird Ihr Dateiname 1. csv, die nicht im Verzeichnis existiert. Verwenden Sie diese Funktion, um den Pfad jeder ID-Datei abzurufen.

filepaths <- function (id){ 
    allfiles = list.files(getwd()) 
    file.path(getwd(), allfiles[id]) 
} 
0

Ich hatte dieses Problem, weil ich versuche, gegen den Datenrahmen ein for-Schleife zu laufen und nicht einen Vektor:

ids <- th[th$nobs > threshold,] 
    for(i in ids) { 

das ist, was die Variable „ids“ wie folgt aussieht:

 id nobs 
2  2 1041 
154 154 1095 
248 248 1005 

hätte sein müssen:

ids <- th[th$nobs > threshold,] 
    for(i in ids$id) { 
0

Ich das gleiche Problem in diesem Satz traf:

Browse[2]> read.csv(list.files(".", "XCMS-annotated-diffreport--.*csv$"), row.names = 1) 
Error in file(file, "rt") : invalid 'description' argument 

dann fand ich es zwei verschiedene CSV-Dateien in den gleichen Weg, wie folgt aus:

Browse[2]> list.files(".", "XCMS-annotated-diffreport--.*csv$") 
[1] "XCMS-annotated-diffreport--1-vs-2-Y.csv" "XCMS-annotated-diffreport--1-vs-2.csv" 

Wenn ich eine Datei gelöscht, es funktioniert wieder .

Verwandte Themen