在 R 中进行子集化时保留掩码长度

Preserve mask length when subsetting in R

为什么在 R 中掩码不固定长度?即

> v=c(1,2,3,4,5)
> mask=c(T,T,T,T)
> v[mask]
[1] 1 2 3 4 5

而不是

> v[mask]
[1] 1 2 3 4

我该怎么做?

这是因为回收。如果向量的长度不同,则较短的向量按指定的顺序回收。

比较以下:

> mask=c(F)
> v[mask]
numeric(0)

> mask=c(T)
> v[mask]
[1] 1 2 3 4 5

> mask=c(T, F, T, F)
> v[mask]
[1] 1 3 5

在第一个示例中,F 被回收了 5 次,因此没有打印任何值 - 在第二个示例中情况正好相反。

在第三个示例中,省略了 2 和 4,因为它们使用 F 进行了索引,但是掩码被回收为元素 5

提供了 T

编辑 期望的结果是 1、2、3、4? 尝试掩码 <- c(T, T, T, T, F)

这就是允许像

这样的语句
v[v != 5]

因为比较在整个向量上循环