2013-05-03 51 views
0

如果double爲「零」,我怎樣才能最好地測試(並選擇)。如果已經嘗試過:R測試如果數據幀中的雙數據爲零

summary(df.1[weights==0,1]) 
      Min. 1st Qu.  Median  Mean 3rd Qu.  Max.  NA's 
    -100880.000  0.000  0.000  1.179  0.000 90993.000  17597 

但由於結果不爲零 - 一定是錯誤的。

編輯1 我已經確保了colname的是正確的 - 但我仍然得到同樣的錯誤:如果您要檢查,如果事情

head(df.1) 
     weights 
1 0.00000 
2 -57.09428 
3 0.00000 
4 0.00000 

    summary(df.1[weights==0,1]) 
       Min. 1st Qu.  Median  Mean 3rd Qu.  Max.  NA's 
     -100880.000  0.000  0.000  1.179  0.000 90993.000  17597 
+1

您正在測試,如果在您的全球環境一個向量的元素稱爲'weights'爲零,並使用該子集的第一列你的' data.frame'。這個矢量與第一列相同嗎? – James 2013-05-03 12:45:59

+0

@James Aha! df.1丟失了它的列名。它由df.1 <-as.data.frame(df [1:20000,1])創建。爲什麼colnames被刪除? – ManInMoon 2013-05-03 12:49:55

+0

@詹姆斯 - 請參閱編輯1 – ManInMoon 2013-05-03 12:59:19

回答

1

,說x,是零:

isTRUE(all.equal(x, 0)) 

但是,這並不符合我們預期的方式。因此,讓我們結合this solution

AlmostEqual <- function(x, y, tolerance=1e-8) { 
    diff <- abs(x - y) 
    mag <- pmax(abs(x), abs(y)) 
    ifelse(mag > tolerance, diff/mag <= tolerance, diff <= tolerance) 
} 

然後:

subset(df.1, AlmostEqual(df.1$weights, 0))