Complement of empty index vector is empty index vector again

流过昼夜 提交于 2019-12-02 10:41:54

问题


I know this question was already posted but the answer was a trick to solve the given problem some other way, but the core question remained unanswered.

The question is this.

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

Why it is not the original vector?

Is there a reason for that or am I understanding it wrong. If so whats the correct way to get the complement of an index vector.


回答1:


emptyindices is logical(0) (logical vector of length = 0) and -emptyindices becomes integer(0). So, you're querying the vector with indices of length = 0. You get back a length = 0 integer vector.

Probably you are looking for, for example, 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)



回答2:


Thats because -0 = 0? But I can see how an algorithm can run into problem if this aspect is over-looked. So I suggest using setdiff instead of negative indices.




回答3:


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

Not too sure if this is what you want, but let me know if you wanted something different so I can correct my answer. The answer hashtagged is an alternative answer if this is what you were looking for.



来源:https://stackoverflow.com/questions/15920810/complement-of-empty-index-vector-is-empty-index-vector-again

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!