2013-08-04 33 views
13

Tôi có một tập tin gọi là rRna_RDP_taxonomy_phylum với các dữ liệu sau:R lỗi "tổng hợp không có ý nghĩa đối với các yếu tố"

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 

Và tôi đang sử dụng mã này để tạo ra một biểu đồ pie trong 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() 
} 

Tôi đã sử dụng mã này cho các tệp dữ liệu khác nhau và nó hoạt động tốt, nhưng với tệp được trình bày adobe nó bị lỗi khi trả lại thông báo sau:

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 

Tôi cần hiểu lý do tại sao nó bị lỗi với tệp này và nếu có cách nào để ngăn chặn loại lỗi này.

Cảm ơn!

+0

'tổng (yếu tố (1))' tái tạo lỗi. Nhưng tại sao bạn có các yếu tố trong data.frame này và không có trong các dữ liệu khác? Làm thế nào để bạn đọc dữ liệu của bạn? – agstudy

+0

@smci Vui lòng không sử dụng thẻ [factor] cho các yếu tố trong R. –

+0

@MatthewLundberg: gotcha, không biết. Tôi phải đi thử lại một đống đồ. Vì ngôn ngữ Factor ít phổ biến hơn yếu tố R nên tôi nghĩ nó nên có thẻ [tag: factor-language]. Tôi sẽ nâng thứ này lên Meta. – smci

Trả lời

30

Lỗi xảy ra khi bạn cố gắng gọi sum(x)x là một yếu tố.

Điều đó có nghĩa là một trong các cột của bạn, mặc dù họ trông giống như con số này trên thực tế các yếu tố (những gì bạn đang nhìn thấy là đại diện văn bản)

đơn giản sửa chữa, chuyển đổi sang số. Tuy nhiên, nó cần một bước xen kẽ để chuyển đổi thành ký tự đầu tiên. Sử dụng các mục sau:

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

Bạn đã chạy mã của họ chưa? Nó làm việc cho tôi. Họ đã gọi 'as.numeric (piedat $ V3) 'như bạn đề nghị. –

+0

@JoshuaUlrich Bạn nhận được dữ liệu bằng cách nào? Nhìn vào dòng thứ 3 (thứ 4?) Của mã trong OP 'as.data.frame (t (c (tổng (gia đình [8: nrow (gia đình), 1]),' –

+0

Tôi đã sử dụng 'read.table (văn bản = "...") ', bởi vì họ không cung cấp một tập tin, tôi biết về dòng đó, nó làm cho tất cả các cột là ký tự hoặc thừa số.Điểm của tôi là chúng đã gọi' as.numeric' trên –