7

在 RI 中有以下内容matrix(每行代表从相同样本数据生成的引导 95% 置信区间):

       low   high
[1,]   22.2  25.5
[2,]   23.1  25.9
[3,]   23.4  26.1
...

我知道数据的真实总体平均值是 23.3。所以前两个包括真正的平均值,但第三个不包括。

在 R 中,我想通过时间运行一个for循环,每次检查数据的真实总体平均值是否在该特定区间内,然后返回一个高度的列向量,如果区间包含真实平均值,否则返回。inrow(matrix)inrow(matrix)TRUEFALSE

我怎么能这样做?

4

4 回答 4

17

您可以直接在矩阵列上使用不等式运算符。所以我会简单地做:

> cbind( mat[,1] <= 23.3 & mat[,2] >= 23.3 )

      [,1]
[1,]  TRUE
[2,]  TRUE
[3,] FALSE
于 2012-03-24T23:21:01.813 回答
8
 mat <- matrix(c(22.2,  25.5,
    23.1 , 25.9,
    23.4,  26.1), ncol=2, byrow=TRUE)
 trueval <- 23.3
 apply(mat, 1, findInterval, x=trueval)
#[1] 1 1 0
 which( apply(mat, 1, findInterval, x=trueval) == 1)
#[1] 1 2
  apply(mat, 1, findInterval, x=trueval) == 1
#[1]  TRUE  TRUE FALSE
于 2012-03-24T22:48:50.170 回答
7

Just for the record, this can also be easily achieved using between from the data.table package.

data.table::between(23.3, mat[, 1], mat[, 2])
## [1]  TRUE  TRUE FALSE
于 2016-12-15T10:31:39.353 回答
0

如果您的数据以零为中心,有一种快速的方法可以做到这一点,

Zero.included = apply(mat,1,function(x){prod(sign(x))<=0})

if your matrix is not centered around the mean just add new.mat=mat-23.3

于 2015-10-20T10:11:06.603 回答