2016-02-17 3 views
0

Новое для R и для программирования я рассмотрел все возможные потоки на SO на этом задании Coursera, но не смог понять, в чем проблема. Я знаю, что эту функцию можно оптимизировать, используя lapply и многое другое, но я хотел бы знать, почему эта функция не работает. Я чувствовал, что некоторые вопросы по этой функции несколько раздражают некоторых пользователей. Честно говоря, я просмотрел соответствующие сообщения, и я не вижу, что я могу сделать с этой конкретной ошибкой.Нет выхода при запуске функции

pollutantmean <- function (directory, pollutant, id) { 
    #Create the data frame with the data from the 332 files 

    files <- list.files(getwd()) 
    df <- data.frame() 
    id <- 1:332 

    for (i in 1:length(id)) {df <- rbind(df, read.csv(files[i])) 

    if (pollutant=="nitrate"){ 

    #Create a subset for nitrate values of df 
    df_nitrate <- df[df$ID==id[i], "nitrate"] 

    #Take mean of df_nitrate 
    mean (df_nitrate, na.rm = TRUE) 

    } else { 
    #Create a subset for sulfate values of df 
    df_sulfate <- df[df$ID==id[i],"sulfate"] 

    #Take mean of df_sulfate 
    mean(df_sulfate, na.rm = TRUE) 
    } 
    } 
} 

Для тех из вас, кто не слышал об этой функции присваивания: У меня есть 332 файлов CSV (названный 001.csv, 002.csv и так далее) в моем рабочем каталоге. Задача состоит в том, чтобы получить все из них в одном кадре данных и иметь возможность вызывать среднее значение столбца файла (заданного переменной «id», соответствующей этому файлу) или нескольких файлов (некоторые примеры функций и результатов можно найти here)

Я попытался вызвать отладочных или отладочные функции, чтобы расположить эту проблему, но безрезультатно:

pollutantmean(getwd(), "nitrate", 23) 
> traceback() 
No traceback available 
> debug(pollutantmean) 
> 

ОС Windows, 10.

Любые предложения или комментарии приветствуются , Заранее спасибо.

+0

В чем проблема? Что такое сообщение об ошибке? – MaxPD

+0

В 'df [df $ ID == id [i]," nitrate "]', фильтрация по id кажется излишней, так как вы загружаете CSV-файлы указанного 'id'. Я думаю, вам нужно вычислить среднее значение за пределами цикла for после загрузки всех файлов CSV. –

+0

@MaxPD Нет сообщения, это вещь. – kazim

ответ

0

Ваш цикл for обернут вокруг вашего, если block. R не возвратит значение в цикле (если вы не используете функцию return, что вы не хотите делать здесь).

pollutantmean <- function (directory, pollutant, id) { 
    #Create the data frame with the data from the 332 files 

    files <- list.files(getwd()) 
    df <- data.frame() 
    id <- 1:332 

    for (i in 1:length(id)) {df <- rbind(df, read.csv(files[i])) 
    # close for loop HERE 
    } 

    if (pollutant=="nitrate"){ 

    #Create a subset for nitrate values of df 
    df_nitrate <- df[df$ID==id[i], "nitrate"] 

    #Take mean of df_nitrate 
    mean (df_nitrate, na.rm = TRUE) 

    } else { 
    #Create a subset for sulfate values of df 
    df_sulfate <- df[df$ID==id[i],"sulfate"] 

    #Take mean of df_sulfate 
    mean(df_sulfate, na.rm = TRUE) 
    } 
    # not HERE 
    #} 
} 
+0

Фактически это был мой первоначальный взнос, но это возвращает только средства из первого файла. Но теперь, по крайней мере, я знаю, почему не было выхода. Спасибо, Адам. – kazim

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