Цикл For в R работает только для последнего элемента

#r #for-loop

#r #цикл for

Вопрос:

 Garages <- c('GarageFinish','GarageQual','GarageCond','GarageType')
Bsmts <- c("BsmtExposure","BsmtFinType2","BsmtQual","BsmtCond","BsmtFinType1")

for (x in c(Garages, Bsmts) )
{
  data[[x]] <- factor( data[[x]], levels= c(levels(data[[x]]),c('None')))
  data[[x]][is.na(data[[x]])] <- "None"
}
  

У меня есть два вектора, хранящих столбцы, которые содержат пропущенные значения.
Я пытаюсь использовать цикл ‘for’ для перебора всех этих столбцов и замены отсутствующих значений в этих столбцах на «None» в качестве нового уровня этих факторных переменных.

Однако после запуска этого блока кода я получил только замену отсутствующих значений столбца «BsmtFinType1». Кто-нибудь может сказать мне, в чем проблема? Спасибо.

Ответ №1:

Не удалось воспроизвести проблему с небольшим воспроизводимым примером

 for (x in c(Garages, Bsmts) ) {
   data[[x]] <- factor( data[[x]], levels= c(levels(data[[x]]),c('None')))
   data[[x]][is.na(data[[x]])] <- "None"
 }

data
#  GarageFinish BsmtExposure
#1            a            d
#2            b            e
#3            c         None
#4         None            f
#5            a            g
  

Возможно, что NA значения являются строками "NA" и, следовательно, is.na не удается перехватить его в других столбцах, кроме последнего столбца, где он находится NA

данные

 data <- data.frame(GarageFinish = c('a', 'b', 'c', NA, 'a'), 
    BsmtExposure = c('d', 'e', NA, 'f', 'g'), stringsAsFactors = TRUE)
Garages <- 'GarageFinish'
Bsmts <- 'BsmtExposure'