2013-08-04 13 views
13

Ho un file chiamato rRna_RDP_taxonomy_phylum con i seguenti dati:R errore "importo non significativo per fattori"

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 

e sto usando questo codice per la creazione di un grafico a torta in 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() 
} 

Sto usando questo codice per i diversi file di dati e funziona benissimo, ma con il file presentato Adobe crash restituire il seguente messaggio:

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 

Ho bisogno di capire perché si blocca con questo file e se c'è un modo per prevenire questo tipo di errori.

Grazie!

+0

'sum (factor (1))' riproduce l'errore. Ma perché hai fattori in questo data.frame e non in altri? Come leggi i tuoi dati? – agstudy

+0

@smci Si prega di non utilizzare il tag [fattore] per i fattori in R. –

+0

@MatthewLundberg: gotcha, non lo sapeva. Devo andare a ritoccare un sacco di cose. Dal momento che il linguaggio Factor è meno popolare del fattore R, penso che dovrebbe avere il tag [tag: factor-language]. Lo farò su Meta. – smci

risposta

30

L'errore si verifica quando si tenta di chiamare sum(x) e x è un fattore.

Ciò significa che una delle colonne, anche se sembra essere un numero sono in realtà fattori (quello che state vedendo è la rappresentazione di testo)

semplice correzione, convertire in numerico. Tuttavia, ha bisogno di un passo intermedio di conversione prima in carattere. Utilizzare quanto segue:

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

Hai eseguito il loro codice? Per me funziona. Loro già chiamano 'as.numeric (piedat $ V3)' come suggerisci. –

+0

@JoshuaUlrich Come hai ottenuto i dati? Guarda la 3a (4a?) Riga di codice nell'OP 'as.data.frame (t (c (somma (famiglia [8: nrow (famiglia), 1]),' –

+0

Ho usato 'read.table (testo = "...") ', dal momento che non forniscono un file. Sono a conoscenza di tale riga. Rende tutte le colonne carattere o fattore. Il mio punto è che chiamano già" as.numeric "sul colonne di caratteri: –

Problemi correlati