2017-03-01 177 views
1

它看起來像我無法弄清楚如何做一個簡單的代碼...我想使用apply函數而不是循環的t.test計算。我有兩個矩陣:申請兩個矩陣t.test

data1 <- t(replicate(2000, rnorm(200,mean=6))) 
data2 <- t(replicate(2000, rnorm(200,mean=5))) 

我想執行t.test每個這些矩陣的列的和提取的p值。

我想類似的東西:

comb_data <- array(c(data1, data2), c(dim(data1), 2)) 
p-value_1 <- t(apply(comb_data, 2, function(x) t.test(data1[, 1], data1[, 2])$p-value)) 

缺少什麼我在這裏?

只是爲了清楚什麼我的目標爲:

t.test(data1[,i], data2[,i]) 

我想提取的p值了出來,並存儲爲載體。

+0

你正在嘗試做的兩個樣本t檢驗的數據1在數據2列1的平均值比較,第1欄?第2,3,4列等等? – ira

+0

我正在嘗試爲兩個矩陣中的相應列進行配對t檢驗。 – Rechlay

+0

然後使用'sapply(1:ncol(data1),function(x)t.test(data1 [,x],data2 [,x])$ p.value)' – count

回答

2

由於矩陣具有相同的維數,因此您可以在列索引上循環使用sapply並將它們應用於這兩個矩陣。

sapply(1:ncol(data1),function(x) t.test(data1[,x],data2[,x])$p.value)

1

下面的代碼拆分矩陣轉換成其中每個元素包含一個列的列表,然後調用t.test

all_t_tests = mapply(t.test, split(data1, 1:2000), split(data2, 1:2000), SIMPLIFY = FALSE) 

獲得從他們每個人的p.value

sapply(all_t_tests, '[[', 'p.value') 

Settin g SIMPLIFYTRUEt.test的結果合併爲一個大數據結構,而不是t.test結果的列表。

all_t_tests = mapply(t.test, split(data1, 1:2000), split(data2, 1:2000), SIMPLIFY = TRUE) 

從而方便訪問p.value

all_t_tests['p.value',]