2016-10-21 3 views
0

Я пытаюсь написать функцию, которая берет каталог файлов данных и порог для полных случаев, и вычисляет корреляцию между сульфатом и нитратом для мест мониторинга, где количество полностью наблюдаемых случаев (по всем переменным) больше порога. Функция должна возвращать вектор корреляций для мониторов, отвечающих пороговому требованию. Если никакие мониторы не удовлетворяют пороговому требованию, функция должна возвращать числовой вектор длины 0. Существует несколько ошибок, поэтому я не упоминаю их здесь.Функция Cor в R, вызывающая ошибки

Файлы данных для кода здесь: https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip

Код

corr<-function(directory, threshold=0){ 
    files.list=list.files(directory, full.names=TRUE, pattern=".csv") 
    comp.sum<-numeric() 
    num<-numeric() 

    for(i in 1:332){ 
    data<-read.csv(files.list[i]) 
    data.cor<-na.omit(data[,2:3]) 
    comp.sum<-sum(data.cor) 
    if 
    { 
    comp.sum>threshold 
    cor.var<-cor(data.cor, use="all.obs") 
    } 
    else 
    { 
    num 
    } 
    } 
    cor.var 
} 
+1

По крайней мере, существует условие для '' if''. Я думаю, что это случайно в скобках. – Phann

ответ

1

Я изменил функцию немного, чтобы получить то, что вы хотели. Это, конечно, предполагает, что сульфат и нитраты всегда находятся в столбцах 2 и 3 и что в этом каталоге нет других csvs (как если бы в этих столбцах были цифры, коэффициент корреляции был бы рассчитан для чего-то еще).

corr<-function(directory, threshold=0){ 
    files.list=list.files(directory, full.names=TRUE, pattern=".csv") 
    cors <- rep(0, length(files.list)) 
    for(i in 1:length(files.list)){ 
    data<-read.csv(files.list[i], header = TRUE) 
    data.cor<-na.omit(data[,2:3]) 
    nobs<-nrow(data.cor) 
    if(nobs > threshold){ 
     cors[i]<-cor(data.cor[,1], data.cor[,2]) 
    }else{ 
    cors[i] <- 0 
    } 
    } 
    return(cors) 
} 
+0

Спасибо за код, но не могли бы вы упомянуть об ошибке в моем коде? –

+0

Если вы ставите свою функцию рядом с моим, это довольно очевидно, где ошибки. Например, вы не заполняете элементы вектором своим, а переписываете через 'cor.var' каждый раз, строка с' cor.var' находится внутри оператора 'if', когда он должен быть после и т. Д. –

Смежные вопросы