"Performing multiple t-tests on different variables between the same two groups" で,ラッパーを紹介しているが
余り頻繁に使わないラッパーだと,ラッパーの使い方自体忘れたりして,そのたびに思い出すためにソースを見たり(メモを見たり)ということになる。
たとえば,t.test の場合なども,必要になったらすぐに簡単に書けるようにしておくと吉。
kidney[c("time", "age", "frail")] の部分は,分析対象とする変数だけを含むデータフレームを作っているだけなので,たくさんの変数を指定する場合などは変数名を書くだけで疲れるので, kidney[c(2, 4, 7)] のような指定法による方が便利。この程度のプログラムなら,ラッパーをわざわざ作っておく必要もないだろう。
関数部分が複雑(たとえば,これらの結果をまとめて一つの表にし,LaTeX のソースを作るなど)になると,新たに関数を作る意味もあるだろう。もっとも,そのような関数はもはやラッパーではないけど。
> library(survival)
> data(kidney)
> sapply(kidney[c("time", "age", "frail")], function(x) t.test(x~kidney$sex))
time age
statistic -1.733522 -0.06756775
parameter 34.53963 32.03715
p.value 0.09192286 0.9465497
conf.int Numeric,2 Numeric,2
estimate Numeric,2 Numeric,2
null.value 0 0
alternative "two.sided" "two.sided"
method "Welch Two Sample t-test" "Welch Two Sample t-test"
data.name "x by kidney$sex" "x by kidney$sex"
frail
statistic 0.8431417
parameter 27.62198
p.value 0.4063915
conf.int Numeric,2
estimate Numeric,2
null.value 0
alternative "two.sided"
method "Welch Two Sample t-test"
data.name "x by kidney$sex"
> lapply(kidney[c("time", "age", "frail")], function(x) t.test(x~kidney$sex))
$time
Welch Two Sample t-test
data: x by kidney$sex
t = -1.7335, df = 34.54, p-value = 0.09192
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-124.761114 9.861114
sample estimates:
mean in group 1 mean in group 2
59.30 116.75
$age
Welch Two Sample t-test
data: x by kidney$sex
t = -0.0676, df = 32.037, p-value = 0.9465
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-8.342454 7.806740
sample estimates:
mean in group 1 mean in group 2
43.50000 43.76786
$frail
Welch Two Sample t-test
data: x by kidney$sex
t = 0.8431, df = 27.622, p-value = 0.4064
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.2442908 0.5857194
sample estimates:
mean in group 1 mean in group 2
1.310000 1.139286
lapply()でdata frameの"列名"ではなく"列そのもの"に対して処理を行えばよかったんですね。
大変参考になりました。