2015-05-22 21 views
7

के लिए मैं इतनाएक समारोह कम्बाइन और पाश

tissueA tissueB tissueC 
gene1 4.5 6.2 5.8 
gene2 3.2 4.7 6.6 

की तरह अलग अलग ऊतकों के लिए डेटा है और मैं एक सारांश आंकड़े यह है कि

x = Σ [1-log2(i,j)/log2(i,max)]/n-1 

जहां n ऊतकों की संख्या है (यहाँ गणना करना चाहते हैं यह 3 है), (i, max) एन ऊतकों में जीन के लिए उच्चतम मूल्य है, (यानी जीन 1 के लिए यह 6.2 है)।

मैं पाश

के लिए एक लिखा था के बाद से मैं हर जीन के लिए प्रत्येक ऊतक के लिए इस गणना करने के लिए (के रूप में योग n, और जे = 1 के लिए जे से चला जाता है) और फिर उस

की राशि प्राप्त की है

for (i in seq_along(x) { 
my.max <- max(x[,i]) 
my.statistic <- (1-log2(x[,i]/log2[my.max]) 
my.sum <- sum(my.statistic) 
my.answer <- my.sum/2 #(n-1=3-1=2) 

लेकिन मुझे यकीन है कि कैसे प्रत्येक पंक्ति के लिए पाश के लिए यह लागू करने के लिए, आम तौर पर मैं एक समारोह लिखते थे नहीं कर रहा हूँ और बस है (लागू होते हैं, 1, समारोह (x)) लेकिन मुझे यकीन है कि कैसे पाश के लिए एक हो सकता है नहीं कर रहा हूँ एक समारोह में बदल गया।

gene1 के लिए उम्मीद उत्पादन के लिए, उदाहरण के लिए, यह होगा

(1-log2(4.5)/log2(6.2))/2 + (1-log2(5.8)/log2(6.2))/2 =0.1060983 
+0

की तुलना में तेज़ है, कृपया अपेक्षित आउटपुट जोड़ें। – zx8754

+0

ज़रूर! क्षमा करें मुझे लगता है कि मेरे मूल में लूप के लिए मेरे ब्रैकेट में गलतियां थीं, लेकिन मैंने इसे बदल दिया। प्रत्येक जीन के लिए उत्तर 0 से 1 – user3816990

+1

'(1-लॉग 2 (4.5)/लॉग 2 (6.2))/2 + (1-लॉग 2 (5.8)/लॉग 2 (6.2))/2' के बराबर होना चाहिए 0.1060 9 833 , आप '0.0 9 8' कैसे प्राप्त कर रहे हैं? – zx8754

उत्तर

5

इस प्रयास करें:

#data 
df <- read.table(text=" tissueA tissueB tissueC 
gene1 4.5 6.2 5.8 
       gene2 3.2 4.7 6.6") 

#result 
apply(df,1,function(i){ 
    my.max <- max(i) 
    my.statistic <- 
    (1-log2(i)/log2(my.max)) 
    my.sum <- sum(my.statistic) 
    my.answer <- my.sum/(length(i)-1) 
    my.answer 
}) 

#result 
#  gene1  gene2 
# 0.1060983 0.2817665 
6

बस मामले में आप एक बहुत बड़ा डेटा सेट है, तो आप plyr के adply() उपयोग कर सकते हैं जो apply()

library(plyr) 
adply(df, 1, function(x) 
data.frame(my.stat = sum(1-log2((x[,x != max(x)]))/log2(max(x)))/(length(x)-1))) 

#tissueA tissueB tissueC my.stat 
#1  4.5  6.2  5.8 0.1060983 
#2  3.2  4.7  6.6 0.2817665 
संबंधित मुद्दे