我有一个由n个元素组成的向量。
我想知道如何以有效的方式完成以下操作(这基本上是一个rooling计算(:
-
提取具有索引1到k 的元素
-
提取索引为k+1到2k 的元素
- 对那些元素进行t.test
- 提取索引为2到k+1的元素
- 提取索引为k+2到2k+1的元素
- 对那些元素进行t.test。。。。。。7.重复,直到矢量结束
我不需要查看提取值,只需要获取一些统计信息(例如[1]$statistics(。
我可以用循环来做,但我想知道如何用一些函数来做(例如application(。所有最好的
从您的伪代码中不清楚您是否真的期望向量具有n=3*k个元素,但我就是这样编程的。
set.seed(123)
x = rnorm(15)
o = 1:5
k = 5
sapply(o, function(oi){
x1 = x[oi:(k + oi - 1)]
x2 = x[(k + oi):(2 * k + oi)]
t.test(x1, x2)$statistic
})
结果是
t t t t t
0.04435004 1.28433640 1.67879015 0.11191044 -0.19398686
你也可以计算出一些更新公式,用于在t检验中的每对向量上添加和减去一个新元素,但这似乎不值得。
您可以使用sapply
,为了清晰起见,这里封装在一个函数中:
multiple_ttest <- function(vec, k)
{
sapply(seq(length(vec) - 2 * k), function(x){
t.test(vec[x + 1:k], vec[x + (k + 1):(2 * k)])$statistic
})
}
multiple_ttest(rnorm(100), 20)
#> t t t t t t t
#> -0.6253586 -1.1680595 -1.2979357 -1.1051207 -1.4668645 -0.6156220 -0.2470322
#> t t t t t t t
#> -1.2416802 -0.1763081 -0.1682269 -0.2490938 0.4569783 0.7721602 1.4383522
#> t t t t t t t
#> 1.5530524 2.1523397 2.3221591 2.1876903 1.7248729 1.6149827 1.6919704
#> t t t t t t t
#> 1.9747871 2.3833846 2.2826131 2.2337453 2.2225939 1.6284361 2.2067872
#> t t t t t t t
#> 1.2447557 1.1435925 0.6731618 -0.1737223 -0.5889784 -0.7339752 -1.2202893
#> t t t t t t t
#> -1.4936935 -1.5821069 -1.7795797 -1.6290700 -1.7760278 -1.4223367 -1.5931553
#> t t t t t t t
#> -2.6832755 -2.7733223 -2.7710590 -3.0889778 -2.3604743 -2.3510220 -1.5456745
#> t t t t t t t
#> -1.4098492 -0.5268468 -0.3187017 0.1878282 0.5208563 0.5656160 0.4952028
#> t t t t
#> 0.2005182 0.3769581 0.5093635 0.9358878
由reprex包(v0.3.0(于2020-04-02创建