2013-04-10 75 views
1

我知道这个问题已经发布,但得到的答复是一招解决给定的问题一些其他的方式,但核心问题仍然没有答案。补空的索引向量是空的索引向量再次

问题是这样的。

somevector <- 1:5 
emptyindeces <- vector() 
somevector[-emptyindeces] #returns empty vector 

为什么它不是原来的载体?

是否有一个原因还是我的理解是错误的。 如果是这样,获得索引向量补集的正确方法是什么。

+0

您能否提供指向您所指问题的链接? – 2013-04-10 09:00:22

回答

0

emptyindiceslogical(0)(长度= 0的逻辑矢量)并且-emptyindices变成integer(0)。所以,你正在查询长度为0的向量。你得到一个长度= 0的整数向量。

也许你正在寻找的,例如,setdiff

v <- 6:10 
idx1 <- c(1,3) 
idx2 <- vector() 
idx3 <- 1:5 

v[setdiff(seq_along(v), idx1)] 
# [1] 7 9 10 

v[setdiff(seq_along(v), idx2)] 
# [1] 6 7 8 9 10 

v[setdiff(seq_along(v), idx3)] 
# integer(0) 
0

那是因为-0 = 0?但是我可以看到,如果这个方面被忽略,算法会出现问题。所以我建议使用setdiff而不是负指数。

+0

这不是-0。它是-logical(0)=数字(0)(长度为0的矢量),与-0不同。 – Arun 2013-04-10 09:02:16

+0

好的,但这真的在这种情况下分裂头发。 '(1:5)[0]'的结果与'(1:5)[someEmptyVector]'相同。多数民众赞成R如何对待它内部数组索引。 – Nishanth 2013-04-10 09:15:53

0

somevector < - C(1:5,NA,8)
sumvec < -subset(somevector,is.na(somevector)!)

不太清楚,如果这是你想要什么,但让我知道你是否想要不同的东西,所以我可以纠正我的答案。如果这是你正在寻找的,哈希标签的答案是一个替代答案。