【问题标题】:Preserve mask length when subsetting in R在 R 中设置子集时保留掩码长度
【发布时间】: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

我该怎么做?

【问题讨论】:

标签: r vector mask


【解决方案1】:

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

比较以下:

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

因为该比较在整个向量中循环使用

【讨论】:

  • 好的,但是我怎样才能得到想要的结果呢?
  • 掩码 = c(T,T,T,T,F)
  • 有更通用的解决方案吗?因为掩码实际上可以变化,所以我不能只删除最后一个元素。
  • 最后一个例子是通用的。您可以使用您喜欢的任何比较进行索引。即来自向量,或者您可以编写一个函数来进行您喜欢的任何/尽可能多的比较
  • 并非如此。如果说我现在有v=c(1,2,3,4,5,6)mask=c(T,T,T) 你的解决方案给了我1 2 3 4 6 而不是1 2 3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2012-05-17
  • 1970-01-01
相关资源
最近更新 更多