2015-03-18 90 views
0

我正在使用R,我有兩個條件,每個條件都有三個重複,我想將t.test應用於條件(行)中的每個元素。爲此,我願意將apply函數用於包含所有信息的數據集(143,554行),並指定檢索由t.test獲得的pval。implements apply和t.test函數同時

列4,6,8是第一個條件(apply的主要元素)的複製品,colums 10,12,14是第二個條件的元素(示例數據在末尾)。而且我認爲這樣的事情可以做的工作:

t.test.10x = apply(MT.10x[,c(4,6,8)], 1, function(x) t.test(x, MT.10x[,c(10,12,14)])$p.value)

但是這個語法是錯誤的,因爲在t.test第二個條件,提供全表不會被排走行,而不是這種做法將比較10,12,14中的所有行到4,6,8中的每一行。

我不想使用循環,但如果它是絕對必要的...好..

謝謝!!

數據集例如:

Chr Start End wt1_R wt1_T wt2_R wt2_T wt3_R wt3_T ko1_R ko1_T ko2_R ko2_T ko3_R ko3_T 
chr1 3060417 3060419 0.0698 43 0.25 28 0.172 29 0.188 32 0.156 45 0.119 42 
chr1 3060431 3060433 0.786 28 0.818 22 0.526 19 0.895 19 0.833 36 0.784 37 
chr1 3168805 3168807 0.688 16 1 19 0.769 13 0.929 14 0.933 15 0.9 10 
chr1 3228992 3228994 0.7 10 1 11 0.786 14 1 14 0.938 16 0.923 13 
chr1 3233065 3233067 0.857 14 0.917 12 1 17 0.846 13 0.857 21 0.952 21 
chr1 3265234 3265236 0.84 25 0.727 11 0.909 22 0.968 31 0.895 19 0.905 21 
chr1 3265322 3265324 0.111 27 0.25 28 0.55 20 0.385 13 0.467 15 0.462 13 
chr1 3265345 3265347 0.806 31 0.857 35 0.733 30 0.9 30 0.8 25 1 17 
chr1 3265357 3265359 1 30 0.759 29 0.758 33 0.867 30 0.903 31 1 18 
chr1 3265486 3265488 1 15 0.545 22 1 13 0.8 10 0.917 12 1 24 
chr1 3265512 3265514 0.857 28 0.75 20 0.583 24 0.714 21 0.882 17 0.839 31 
chr1 3265540 3265542 0.757 37 0.966 29 0.969 32 0.774 31 0.955 22 0.971 34 
chr1 3265771 3265773 0.741 27 0.864 22 0.963 27 1 20 0.864 22 0.962 26 
chr1 3265776 3265778 1 20 1 21 1 26 0.722 18 1 24 0.852 27 
chr1 3265803 3265805 0.611 18 0.96 25 1 17 1 18 0.895 19 0.828 29 
chr1 3760225 3760227 0.278 36 0.0741 27 0.417 24 0.158 19 0.4 40 0.136 22 
chr1 3760285 3760287 0.851 47 0.711 38 0.867 15 0.81 21 0.914 35 0.893 28 
chr1 3761299 3761301 0.786 14 0.885 26 1 11 0.929 14 0.771 35 0.75 24 
chr1 3761414 3761416 0.706 17 1 17 0.545 22 0.857 14 0.818 11 0.8 15 
chr1 3838606 3838608 0.806 31 0.692 13 0.611 18 1 11 1 23 1 11 
chr1 3838611 3838613 0.767 30 1 13 0.947 19 0.818 11 1 20 1 11 
chr1 4182108 4182110 0.231 13 0.5 14 0.143 21 0.0667 15 0.235 17 0.353 17 
chr1 4547434 4547436 0.9 10 1 13 1 17 1 14 0.909 11 0.909 11 
chr1 4547456 4547458 1 18 1 10 0.895 19 0.833 12 1 12 1 12 
chr1 4547496 4547498 0.812 16 0.917 12 0.75 16 0.923 13 0.818 11 0.9 10 
chr1 4547509 4547511 1 14 1 12 1 15 0.9 10 0.833 12 1 11 
chr1 4547512 4547514 0.923 13 1 12 1 14 0.909 11 0.833 12 0.909 11 
chr1 4765732 4765734 0 11 0 12 0 11 0 13 0 13 0.1 10 
chr1 5185343 5185345 0.818 22 0.909 22 0.963 27 1 15 0.923 13 1 16 
chr1 5185567 5185569 0.885 52 0.781 32 0.984 63 1 37 0.844 45 1 29 

回答

1

我認爲你正在尋找mapply

mapply(function(x,y) 
      t.test(x,y)$p.value, 
      MT.10x[,c(4,6,8)], MT.10x[,c(10,12,14)]) 

## wt1_R  wt2_R  wt3_R 
## 0.4790554 0.8289961 0.5204527 
+0

我認爲這是錯誤的... 的t.test mapply適用於列,所以這個比較柱4的30個元件到柱10的30個元件等等​​(6-12和8-14)。這就是爲什麼這隻能獲得三個值而不是三十個預期的原因 – Edahi 2015-03-18 22:38:11