对 R 中向量的连续元素应用 t.test

Apply t.test on consecutive elements of a vector in R

我有一个包含 n 个元素的向量。

我想知道如何以有效的方式执行以下操作(这基本上是一个滚动计算):

  1. 提取索引为1到k的元素

  2. 提取索引为k+1到2k的元素

  3. 对这些元素执行 t.test
  4. 提取索引为 2 到 k+1 的元素
  5. 提取索引为 k+2 到 2k+1 的元素
  6. 对这些元素执行 t.test …… 7.Repeat 直到矢量结束。

我不需要查看提取值,只需获取一些统计信息(例如 [1]$statistic)。

我可以用循环来完成,但我想知道如何用某些函数(例如应用)来完成。 祝一切顺利

从你的伪代码中不清楚你是否真的希望向量有 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 package (v0.3.0)

于 2020-04-02 创建