まことにもっていらぬお節介の極みであるが,「二群間で差のある変数を特定する」で提示されている 2 つの関数をまとめて,データとグループ変数の指定を少し柔軟にし,結果をソートするかしないかの引数を追加したり...
ほとんど原型をとどめなくなちゃったけど,キレイにはなったかな。
「多群間で差のある変数を特定する例」でも,この関数を下敷きに使うこともできよう。
# 全ての変数にウィルコクソンの順位和検定または t 検定を行う関数
Rep <- function(data, group, method = c("wilcox", "t"), sort = TRUE) {
method <- match.arg(method)
old <- options(warn = -1)
ans <- if (method == "wilcox")
sapply(data, function(d) wilcox.test(d ~ group, paired = FALSE)$statistic)
else
sapply(data, function(d) t.test(d ~ group, paired = FALSE, var.equal = FALSE)$statistic)
options(old)
ans <- cbind(ans)
rownames(ans) <- colnames(data)
if (sort) ans <- cbind(ans[order(ans[,1], decreasing=TRUE), ])
colnames(ans) <- ifelse(method == "wilcox", "W", "t")
ans
}
# データの読み込み
library(kernlab)
data(spam)
# 関数の実行(データの指定)
Rep(spam[c(1:10, 16, 19)], spam$type)
Rep(spam[c(1:10, 16, 19)], spam$type, sort=FALSE)
Rep(spam[c(1:10, 16, 19)], spam$type, method = "t")
Rep(spam[c(1:10, 16, 19)], spam$type, method = "t", sort=FALSE)