裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

ダメ出し対象募集中

2012年02月21日 | ブログラミング

なんかちがうな~

もっとすっきりかけないの?

どうしたらいいの?

 

そんな,プログラムが載っているWebページのアドレスを曝してください。お答えします。(^_^;)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ダメ出し:規則性を吸収した汎用性のあるプログラムを書こう

2012年02月21日 | ブログラミング

2012年2月12日 (日) Multiple comparison among 4 groups using Fisher exact test
2012年2月10日 (金) Multiple comparison among 3 groups using Fisher exact test

5グループ,6グループ,... になったらまたプログラムを書くのだろうか?

同じような内容を繰り返す部分は,combn 関数を使うと簡単に書くことができる。
このやりかただと,p.x に名前を付けるためにもう一度 combn を使わなくてはならないが,それはデメリットには勘定されない。
結果を関数内で書くのはあまりお勧めではない。
必要ならば,print メソッドを書いてやるとよい。

p.fisher <- function(tab) {
    nc <- ncol(tab)
    p.x <- combn(nc, 2, function(x) fisher.test(tab[, x])$p.value)
    names(p.x) <- combn(nc, 2, function(x) sprintf("p.fisher.%d%d", x[1], x[2]))
    n.pairs <- length(p.x)
    hochberg <- cbind(Crude = rev(sort(p.x)), "Hoch-Adj." = rev(sort(p.x)) * seq_along(p.x))
    holm <- cbind(Crude = sort(p.x), "Holm-Adj." = sort(p.x) * rev(seq_along(p.x)))
    ans <- list(hochberg = hochberg, holm = holm)
    class(ans) <- "p.fisher"
    return(ans)
}
print.p.fisher <- function(obj, digits = 4) {
    print(round(obj$hochberg, 4))
    print(round(obj$holm, 4))
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村