2013-08-04 3 views
13

У меня есть файл с именем rRna_RDP_taxonomy_phylum со следующими данными:R ошибка «сумма не имеет смысла для факторов»

364 "Firmicutes"   39.31 
244 "Proteobacteria"  26.35 
218 "Actinobacteria"  23.54 
65 "Bacteroidetes"   7.02 
22 "Fusobacteria"   2.38 
6 "Thermotogae"   0.65 
3  unclassified_Bacteria 0.32 
2 "Spirochaetes"   0.22 
1 "Tenericutes"   0.11 
1  Cyanobacteria   0.11 

И я использую этот код для создания круговой диаграммы в R:

if(file.exists("rRna_RDP_taxonomy_phylum")){ 
    family <- read.table ("rRna_RDP_taxonomy_phylum", sep="\t") 
    piedat <- rbind(family[1:7, ], 
       as.data.frame(t(c(sum(family[8:nrow(family),1]), 
           "Others", 
           sum(family[8:nrow(family),3]))))) 
    png(file="../graph/RDP_phylum_low.png", width=600, height=550, res=75) 
    pie(as.numeric(piedat$V3), labels=piedat$V3, clockwise=TRUE, col=graph_col, main="More representative Phyliums") 
    legend("topright", legend=piedat$V2, cex=0.8, fill=graph_col) 
    dev.off() 
    png(file="../graph/RDP_phylm_high.png", width=1300, height=850, res=75) 
    pie(as.numeric(piedat$V3), labels=piedat$V3, clockwise=TRUE, col=graph_col, main="More representative Phyliums") 
    legend("topright", legend=piedat$V2, cex=0.8, fill=graph_col) 
    dev.off() 
} 

Я использую этот код для разных файлов данных, и она работает нормально, но с файлом представил саман его зависание возвращенного следующее сообщение:

Error in Summary.factor(c(6L, 2L, 1L), na.rm = FALSE) : 
    sum not meaningful for factors 
Calls: rbind -> as.data.frame -> t -> Summary.factor 
Execution halted 

Мне нужно понять, почему он сбой с этим файлом и если есть какой-либо способ предотвратить подобные ошибки.

Спасибо!

+0

'sum (factor (1))' воспроизводит ошибку. Но почему у вас есть факторы в этом data.frame, а не в других? Как вы читаете свои данные? – agstudy

+0

@smci Пожалуйста, не используйте тег [factor] для факторов в R. –

+0

@MatthewLundberg: gotcha, не знал. Я должен переложить кучу вещей. Поскольку язык факторов менее популярен, чем фактор R, я думаю, что он должен иметь тег [tag: factor-language]. Я подниму это на Мета. – smci

ответ

30

Ошибка возникает при попытке позвонить sum(x) и x является фактором.

Что это означает, что один из ваших колонок, хотя они выглядят как числа, на самом деле факторы (то, что вы видите, это текстовое представление)

легко исправить, преобразовать в числовой. Тем не менее, для этого требуется промежуточный шаг преобразования в характер. Используйте следующее:

family[, 1] <- as.numeric(as.character(family[, 1])) 
family[, 3] <- as.numeric(as.character(family[, 3])) 
+0

Вы запустили свой код? Меня устраивает. Они уже называют 'as.numeric (piedat $ V3)', как вы предлагаете. –

+0

@JoshuaUlrich Как вы получили данные? Посмотрите на третью (четвертую?) Строку кода в OP 'as.data.frame (t (c (sum (family [8: nrow (family), 1]),' –

+0

Я использовал 'read.table (текст = "...") ', так как они не предоставляют файл. Я знаю эту строку. Он делает все столбцы либо символом, либо фактором. Я хочу сказать, что они уже называют' as.numeric' на столбцы символов. –