2016-08-04 20 views
0

Ich mache den Kurs Coursera R Programmierung und habe Probleme beim Versuch, die Bindung von For-Loop-Ergebnisse zu einem Vektor einzurichten.Binding For-Schleife Ausgabe mit Schwelle zu einem Vektor in R 3.3.1

Ich habe bereits sichergestellt, dass der Analyse-Code auf einer einzigen Tabelle funktioniert, aber ich bin mir nicht ganz sicher, wie man es erhält, alle 332 Werte zu binden.

corr <- function(directory, threshold = 0, id = 1:332) { 
    filename <- list.files(directory, full.names = TRUE) 
    a <- numeric() 
    for(i in id) { 
    tmp_data <- read.csv(filename[i]) 
    nobs <- sum(complete.cases(tmp_data)) 
    if(nobs < threshold) { 
     a} else { 
     nonas <- tmp_data[!is.na(tmp_data$sulfate) & !is.na(tmp_data$nitrate),] 
     x <- corr(nonas$sulfate, nonas$nitrate) 
     a[i] <- x 
     } 
    } 
    a 
} 

Als ich das laufen lasse, erhalte ich eine Rückkehr dieses Fehlers:

> x <- corr("specdata", 20) 
Error in list.files(directory, full.names = TRUE) : 
invalid 'path' argument 

In anderen Funktionen, ich habe kein Problem mit der list.files Linie hatte. Ich weiß, dass ich etwas falsch mache, aber ich kann es nicht herausfinden.

+0

"specdata" ist in Ihrem Arbeitsverzeichnis? Andernfalls müssen Sie den vollständigen Pfad angeben, zum Beispiel: "C:/Benutzer/Dokumente/R/specdata" – Robert

+0

Ja, "specdata" befindet sich in meinem Arbeitsverzeichnis. – JDS

+0

Was ist, wenn Sie 'x <- corr (directory =" specdata ", threshold = 20) versuchen? –

Antwort

0

Ich fand es heraus. Ich hatte unwissentlich einen rekursiven Code. Es hätte cor() sein sollen, NICHT corr().

corr <- function(directory, threshold = 0, id = 1:332) { 
    filename <- list.files(directory, full.names = TRUE) 
    a <- c() 
    for(i in id) { 
    tmp_data <- read.csv(filename[i]) 
    nobs <- sum(complete.cases(tmp_data)) 
    if(nobs > threshold) { 
     nonas <- tmp_data[!is.na(tmp_data$sulfate) & !is.na(tmp_data$nitrate),] 
     x <- cor(nonas$sulfate, nonas$nitrate) 
     a[i] <- x 
     } 
    } 
    b <- na.omit(a) 
}