2017-02-24 5 views
0

におけるペアワイズ関数は、私はその後、[1,1] & & [1,2]、[1,1] & &〔1間で行わ関数を適用します3] [1,2] & & [1,3](組み合わせ)。計算Iは行列3×3を有する例えばR

その後、私はこれは私の行列

 [,1] [,2] [,3] 
[1,] -0.2 0.52 0.36 
[2,] -0.2 0.66 0.50 
[3,] 0.8 0.10 1.00 

の一例であり、私はこの機能を適用する必要が

次の行に移動します。

Fst <- function (x,y) { 
    F = sd(c(x,y))/(mean(c(x,y)) * (1-mean(c(x,y)))) 
    F 
} 

いずれかはどのように知っていますこれを行う ???あなたが望むこれがどうなる

+1

'?combn' – akrun

+2

を使用して、私はおそらくこれを行う方法を知っているが、明らかに最善のアプローチは、特定の例(とあなたが特に適用する機能)に依存します。 – Roland

+0

@jogoありがとう、私はstackoverflowで初心者です:) – Erika

答えて

0

事前にありがとう:

m <- matrix(c(-0.2, 0.52, 0.36, -0.2, 0.66, 0.50, 0.8, 0.10, 1.00), 3, 3, byrow=TRUE) 
m  
myfun <- function(x) { 
    apply(combn(x,2), 2, function(x) sd(x)/mean(x)/(1-mean(x))) 
} 
apply(m, 1, myfun) 
# > apply(m, 1, myfun) 
#   [,1]  [,2]  [,3] 
# [1,] 3.7880720 3.433720 1.999898 
# [2,] 5.3801603 3.882155 1.571348 
# [3,] 0.4591602 0.464438 2.571297 

apply(m, 1, myfun)作品を各行に(最初の行の結果は、最初の列に結果の行列の最初の要素、すなわちになります) 。 combn(x,2)は、行列の列方向に格納されたペアを生成します。combn(11:15, 2)を参照してください。別のapply()がその行列の各列を処理しています。
sd()mean()がベクトルを処理しているため、関数を変更しました。

+0

ありがとうたくさん!!!! – Erika

+0

http://stackoverflow.com/help/someone-answers – jogo

1

行をループする必要はありません。あなたがあなたの機能をベクトル化するならば、それらを一度に効率的に行うことができます。変更しない場合は、Vectorizeを使用してください。

m <- matrix(c(-0.2, -0.2, 0.8, 0.52, 0.66, 0.10, 0.36, 0.50, 1), 3) 

library(matrixStats) 
Fst_vectorized <- function (x,y) { 
    X <- cbind(x, y) 
    F = rowSds(X)/(rowMeans(X) * (1-rowMeans(X))) 
    F 
} 

Fst(m[1,1], m[1,2]) 
#[1] 3.788072 

res <- combn(as.data.frame(m), 2, FUN = function(x) Fst_vectorized(x[[1]], x[[2]])) 
colnames(res) <- combn(seq_len(ncol(m)), 2, 
         FUN = function(x) paste(x[[1]], x[[2]], sep = "vs")) 
#   1vs2  1vs3  2vs3 
#[1,] 3.788072 5.380160 0.4591602 
#[2,] 3.433720 3.882155 0.4644380 
#[3,] 1.999898 1.571348 2.5712974 
+0

ありがとうございました!!!!私はこのエラーが発生しました。エラー: 'colnames < - '(* tmp *、value = c(" 1vs2 "、" 1vs3 "、" 2vs3 ")): 長さが' dimnames ' 2]配列エクステントと等しくない ' – Erika

+0

このコードはエラーなしで実行されます。エラーが発生した場合は、何かを変更しました。 – Roland

関連する問題