2013-08-04 6 views
13

Ich habe eine Datei rRna_RDP_taxonomy_phylum mit folgenden Daten genannt:R Fehler „Summe nicht aussagekräftig für Faktoren“

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 

Und ich verwende diesen Code für ein Kreisdiagramm in R zu erstellen:

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() 
} 

ich habe für verschiedene Datendateien diesen Code benutzen und es funktioniert gut, aber mit der Datei adobe es präsentierte Absturz die folgende Meldung Rückkehr:

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 

Ich muss verstehen, warum es mit dieser Datei abstürzt und ob es irgendeinen Weg gibt, diese Art von Fehlern zu verhindern.

Danke!

+0

'sum (Faktor (1)) reproduziert den Fehler. Aber warum haben Sie Faktoren in diesem data.frame und nicht in anderen? Wie liest du deine Daten? – agstudy

+0

@smci Bitte verwenden Sie nicht das [Faktor] -Tag für Faktoren in R. –

+0

@MatthewLundberg: Gotcha, wusste nicht. Ich muss eine Menge Sachen neu schreiben. Da die Factor-Sprache weniger populär ist als der R-Faktor, denke ich, dass sie das Tag [tag: factor-language] haben sollte. Ich werde dies auf Meta erheben. – smci

Antwort

30

Der Fehler kommt, wenn Sie versuchen, sum(x) aufrufen und x ist ein Faktor.

Was das bedeutet, ist, dass einer Ihrer Spalten, obwohl sie wie Zahlen aussehen tatsächlich Faktoren sind (was Sie sehen, ist die Textdarstellung)

einfache Lösung, um numerische zu konvertieren. Es erfordert jedoch einen Zwischenschritt der ersten Umwandlung in Zeichen. Verwenden Sie Folgendes:

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

Haben Sie ihren Code ausgeführt? Für mich geht das. Sie nennen bereits 'as.numeric (piedat $ V3)', wie Sie vorschlagen. –

+0

@JoshuaUlrich Wie haben Sie die Daten erhalten? Betrachten Sie die 3. (4.?) Codezeile im OP 'as.data.frame (t (c (Summe (Familie [8: nrow (Familie), 1]),' –

+0

Ich benutzte 'read.table (Text = "...") ', da sie keine Datei bereitstellen. Ich kenne diese Zeile. Sie macht alle Spalten entweder als Zeichen oder als Faktor. Mein Punkt ist, dass sie' as.numeric' bereits auf der Zeichenspalten –