在R

时间:2017-01-09 23:05:51

标签: r vector mask

为什么在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

我该怎么做?

1 个答案:

答案 0 :(得分:3)

这是因为回收利用。如果向量具有不同的长度,则较短的向量按照指定的顺序进行再循环。

比较以下内容:

> 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]

因为这种比较是在整个载体上回收的