考虑这个实验:
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的回答,我也应该问:是不是在[]
内部使用负号确实是“非”操作,而不是改变实际情况指定指数的价值?
答案 0 :(得分:4)
因为这个原因无效:
> x <- numeric(0)
> x
numeric(0)
> -x
numeric(0)
> identical(x, -x)
[1] TRUE
IOW,否定没有元素的向量会使向量保持不变,因此使用向量的索引操作也将保持不变。