2013-07-17 2 views
0

У меня проблема с уровнем фактора. Я думал, что это будет решено с помощью stringAsFactors = FALSE, но это не работает.недействительный факторный уровень data.frame ошибка во всех строкахAsFactors = FALSE

здесь pL Список с 290 элементами. Я хотел бы определить пустой data.frame, чем заполнить его, используя rbind.

ttable <- data.frame(ID_REF=c(1,2,3,4,5,6), IDENTIFIER=c("ERN2", "HTR5A", "ACPP", "GNAO1", "HTR1F", "DNAH1"), GSM11708=c("<NA>", 1.994, "<NA>","<NA>","<NA>","<NA>"), GSM11735=c(0.18, "<NA>","<NA>","<NA>","<NA>","<NA>")) 
pL <- list("GSTT4", "AHRR", "HAX1", "DNM1L", "MEIS1", "SLC17A3", "CES2", "MLL2", "IKBKB", "GSTA4") 

gn <- data.frame(gn = character(0), stringsAsFactors=FALSE) 

for(i in pL){ 
    n <- nrow(subset(ttable, IDENTIFIER==i)) 
    if (n < 1){ 
    gn <- rbind(gn, i) 
    } 
    else{ 
    for(j in 1:n){ 
     gn <- rbind(gn, i) 
    } 
    } 
} 
+3

Без данных мы не сможем воспроизвести вашу ошибку. Вы также должны избегать использования 'rbind' внутри цикла. – agstudy

+0

Вы можете попробовать 'rbind (gb, i, strAsAsFactors = FALSE)' или установить глобальную опцию. Однако @agstudy дал очень важные советы. Выращивание объекта в цикле slooooowwww. – Roland

+0

@agstudy Не могли бы вы написать, пожалуйста, что еще я должен использовать? – charisz

ответ

0

Трудно помочь без воспроизводимого примера. Но это должно работать:

gn1 <- unlist(lapply(pL,function(i){ 
    n <- nrow(subset(ttable, IDENTIFIER==i)) 
    gn <- if (n < 1) i else seq(n) 
})) 

г Я запустить свой код я получаю gn data.frame. Вы управляете моим, вы получаете gn1 вектор. I cbind 2 для сравнения.

cbind(as.data.frame(gn1),gn) 
     gn1 X.GSTT4. 
1 GSTT4 GSTT4 
2  AHRR  AHRR 
3  HAX1  HAX1 
4 DNM1L DNM1L 
5 MEIS1 MEIS1 
6 SLC17A3 SLC17A3 
7  CES2  CES2 
8  MLL2  MLL2 
9 IKBKB IKBKB 
10 GSTA4 GSTA4 

Поскольку вы семена, 2 столбца идентичны.

+0

Я не понимаю, почему «gn», а не «gn1». – charisz

+0

@charisz Я редактирую свой ответ, чтобы уточнить. – agstudy

+0

Я имел в виду в первом коде третий ряд. Почему это или должна быть разница? Лучше использовать разные имена переменных? – charisz

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

  • Нет связанных вопросов^_^