2015-10-25 13 views
0

Когда я запускаю этот код в командной строке R, он отлично работает; У меня есть 1 наблюдение за 5 переменными в df_frame.rbind не работает должным образом в циклах

st <- "AK" 
df_frame <- data.frame(hospital=factor(), 
     state=factor(),rank=numeric(),ties=numeric(), 
     outcome=numeric()) 
temp <- data.frame(list(hospital="<NA>", 
      state=st,rank=0,ties=0,outcome=0)) 
df_frame <- rbind(df_frame,temp) 

Когда я использую один и тот же код в цикле, где I цикла над списком состояний:

for (st in states) { 
    if (st %in% ranked_states) { 
     states_lst <- which(hosp_state == st) 
     df_frame <- rbind(df_frame, df_outcome[states_lst,]) 
     # Handle ties here 
    } else { 
    #df_frame[nrow(df_frame)+1,] <- c("<NA>",state,0,0,0) 
    #df_frame <- rbind(df_frame, 
    # c(as.character("<NA>"),as.character(state),0,0,0)) 
    temp <- data.frame(list(hospital="<NA>", 
     state=st,rank=0,ties=0,outcome=0)) 
    df_frame <- rbind(df_frame,temp) 
    } 
} 

У меня есть эти предупреждения:

1: In `[<-.factor`(`*tmp*`, ri, value = "<NA>") : 
     invalid factor level, NA generated 
    2: In `[<-.factor`(`*tmp*`, ri, value = "AK") : 
     invalid factor level, NA generated 

Независимо от того, магическое сочетание factor и stringsAsFactors=FALSE, это не работает.

+0

маленький * воспроизводимым * пример поможет ... –

+0

параметр 'option (strAsAsFactors = FALSE)' будет проще всего. вы не можете просто комбинировать факторные переменные с разными уровнями. это будет похоже на обязательный «секс» и «состояние» - r предупреждает вас, что они несовместимы. – rawr

+0

@hfty Вот пример цикла ' df_frame <-data.frame (hospital = factor(), state = фактор()) для (ст в штатах) { если (ст% в% ranked_states) { # это работает отлично \t \t states_lst <- какой (hosp_state == е) df_frame <- rbind (df_frame , \t df_outcome [states_lst,]) else { \t \t # это заменить и ул Н.А. при использовании в цикле \t \t # на подсказке, она отлично работает Темп <- data.frame (список (больница = «», состояние = й, ранг = 0, галстуков = 0, result = 0)) df_frame <- rbind (df_frame, temp) } } ' – physnoct

ответ

0

Я получил ту же ошибку. После нескольких попыток моя проблема заключалась в том, что один из data.frame был не только data.frame.

класс (your_dataframe)

Результат:"grouped_df" "tbl_df" "tbl" "data.frame"

Я разрешаться your_dataframe <- as.data.frame(your_dataframe)

PS: Это не было необходимости на окнах plataform только в Ubuntu