【发布时间】:2017-01-09 23:05:50
【问题描述】:
为什么在 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
我该怎么做?
【问题讨论】:
-
也许有用stackoverflow.com/questions/9335099/…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? 试试掩码
这就是允许这样的声明
v[v != 5]
因为该比较在整个向量中循环使用
【讨论】:
v=c(1,2,3,4,5,6) 和mask=c(T,T,T) 你的解决方案给了我1 2 3 4 6 而不是1 2 3