在 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]
因为比较在整个向量上循环
为什么在 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]
因为比较在整个向量上循环