2016-10-20 2 views
0

У меня есть этот код iv, написанный для подсчета, который читает каталог, полный файлов, и сообщает количество полностью наблюдаемых случаев в каждом файле данных. Функция должна возвращать фрейм данных, где первый столбец - это имя файла, а второй столбец - количество полных случаев. Мне нужна помощь в ошибки в этом коде, который:Считывание кода кода и исправление ошибок

Error in [.data.frame(data, i) : undefined columns selected
In addition: Warning messages:
1: In comp[i] <- !is.na(data[i]) : number of items to replace is not a multiple of replacement length
2: In comp[i] <- !is.na(data[i]) : number of items to replace is not a multiple of replacement length
3: In comp[i] <- !is.na(data[i]) : number of items to replace is not a multiple of replacement length

Код следующее:

complete<-function(directory, id=1:332){ 
     files.list<-list.files(directory, full.names=TRUE, pattern=".csv") 
     comp<-character() 
     return.data<-data.frame() 
     nobs<-numeric() 

     for(i in id){ 
     data<-read.csv(files.list[i]) 
      comp[i]<-!is.na(data[i]) 
      nobs[i]<-nrow(comp[i]) 

    } 
     return.data<-c(id,nobs) 
    } 

ответ

2

Ваша проблема в том, что !is.na() возвращает булево вектор, а не одно значение, вы не можете вставить несколько элементов в единый элемент comp[i].

В R есть функция complete.cases, которая делает именно то, что вы пытались. При этом ваша функция будет выглядеть следующим образом

complete<-function(directory, id=1:332){ 
    files.list<-list.files(directory, full.names=TRUE, pattern=".csv") 
    nobs <- numeric(length(id)) 
    for(i in id){ 
    data<-read.csv(files.list[i]) 
    nobs[i]<-sum(complete.cases(data)) 
    } 
    return.data<-data.frame(id,nobs) 
} 

Это в стороне ваш код имеет несколько недостатков, которые я хочу отметить

  • почему comp типа character?
  • выделить размер вектора, если вы знаете, что заранее (nobs <- numeric(length(id)))
  • вы действительно хотите проверить только столбец i вашего i го загруженную data.frame` для отсутствующих значений?
  • , если вы назначили return.data <- c(id,nobs)return.data будет единственным числовым вектором с ids в начале и nobs в конце.
+0

Спасибо wici за разъяснения. Я новичок, и это ошибки, которые я могу понять и понять для понимания основ. Благодаря тонну! –

0

вам необходимо обеспечить индекс ваших данных .. так что он выбирает все строки и я column.eg комп [я] < - is.na (данные [, я])

+0

Но даже после того, как индексировать это дает по ошибке: Ошибка в '[.data.frame' (данные, я): неопределенные столбцы выбраны –

+0

попробовать это: комп [[I]] <- данные [есть. na (данные $ colum2),] вместо colum2 определяют имя вашего столбца ... его трудно исправить код, подобный этому без данных, поэтому лучше всего добавить воспроизводимый пример – RomRom

+0

, чтобы оценить помощь, но то, что я пытаюсь добиться - получить значения из файла данных i-го значения на comp [[i]]. Вот ссылка на данные, https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip –

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