2013-04-10 73 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)!)

不太清楚,如果這是你想要什麼,但讓我知道你是否想要不同的東西,所以我可以糾正我的答案。如果這是你正在尋找的,哈希標籤的答案是一個替代答案。