2016-07-02 5 views
-2

Я хочу, чтобы вычислить среднее значение столбца всех CSV в одном каталоге, но при запуске функции он дает мне ошибкуInvalid «длина» Аргумент ошибки

«Ошибка в числовой (НЗ) : неверный аргумент length.

Я считаю, что файлы CSV имеют значение n/a, но это не должно влиять на вычисление числа столбцов?

pollutantmean <- function(directory, pollutant, id =1:332, removeNA = TRUE){ 
      nc <- ncol(pollutant) 
      means <- numeric(nc) 
      for(i in 1:nc){ 
      means[i] <- mean(pollutant[, i], na.rm = removeNA) 
      } 
      means 
} 

Так вот моя версия для обновления. Я установил R, чтобы прочитать все .csv в один файл, используя «lapply». Все эти csv-файлы имеют согласованное имя от 001 до 1xxx и т. Д. Поэтому я устанавливаю идентификатор от 001 до любого раза.

files <- list.files(pattern = ".csv") 
directory <- lapply(files, read.csv) 
pollutantmean <- function(directory, pollutant, id =1:332, removeNA = TRUE){ 
    nc <- ncol(pollutant) 

    means <- numeric(nc, na.rm=removeNA) 

    for(i in 1:nc){ 

    means[i] <- mean(pollutant[, i], na.rm = removeNA) 
    } 
    means 
} 

Я пытался calcuate средних значений загрязнителя accross всего каталог со всеми CSV в одном файлах. Я намерен удалить все недостающие значения, используя «na.rm = removeNA». Но это дает мне ошибку Ошибки в числовом (пс, na.rm = removeNA): неиспользуемый аргумент (na.rm = removeNA)

+0

Вы можете по крайней мере попытаться выполните некоторую отладку самостоятельно. Вставьте выражения 'print' перед вызовом' ncol'. Аргумент 'na.rm' является логическим, поэтому должен быть' TRUE' 'FALSE', а не' removeNA'. Но почему бы вам не использовать встроенную функцию 'colMeans'? – Bhas

+0

@Bhas. Я должен был более внимательно изучить список аргументов: 'removeNA' является аргументом функции! – Bhas

+0

Просто «означает» означает <- sapply (загрязнитель, функция (x) означает (x, na.rm = T)) ' –

ответ

0
pollutantmean <- function(directory, pollutant, id = 1:332) { 
    files_list <- list.files(directory, full.names = TRUE) #creats list of files and the csv files are sitting in the directory 
    dat <- data.frame() #creates empty data frame 
    for(i in id){ 
    dat<- rbind(dat,read.csv(files_list[i])) #combin all the csv data together 
    } 
    good <- complete.cases(dat) #remove all the NA values from csv data set 
    mean(dat[good, pollutant], na.rm = TRUE) # finally calculate mean 
} 

Вот мой ответ