R如何处理不存在的索引值?

时间:2013-07-05 15:54:17

标签: r subset

考虑这个实验:

Rgames> oof<-c(6,7,8,0,10)
Rgames> badoof<-vector()
Rgames> oof[badoof]
numeric(0)
Rgames> oof[-badoof]
numeric(0)
Rgames> oof[-0]
numeric(0)
Rgames> oof[-10]
[1]  6  7  8  0 10
Rgames> oof[-c(10,0)]
[1]  6  7  8  0 10

Rgames> oof[!(1:length(oof)%in% c(badoof) )]
[1]  6  7  8  0 10

我知道“只有负整数可以与零混合”是对子集的限制。我不清楚的部分是为什么oof[badoof]oof[-badoof]都没有返回任何内容。这里的背景是我有一个功能,它搜索坏数据并从数据向量中删除它们。我希望不必分别处理没有找到不良物品的情况(即badoof没有元素)或通过if / else处理。上面的最后一个示例,使用%in%的示例,但我想知道为什么R不接受索引“-badoof”构造。

编辑:根据Hong Ooi的回答,我也应该问:是不是在[]内部使用负号确实是“非”操作,而不是改变实际情况指定指数的价值?

1 个答案:

答案 0 :(得分:4)

因为这个原因无效:

> x <- numeric(0)
> x
numeric(0)
> -x
numeric(0)
> identical(x, -x)
[1] TRUE

IOW,否定没有元素的向量会使向量保持不变,因此使用向量的索引操作也将保持不变。