2011-09-12 26 views
0

我遍歷包含4個列表的列表。下面是我得到的輸出結果,我想知道爲什麼我要用這個精確度來獲得這個結果,例如,爲什麼不是第一個只有1.00,因爲它在其他情況下?最後一個值列表上有奇怪的輸出

[[1]] 
[1] 1.00 0.96 0.84 0.74 0.66 0.56 0.48 0.36 0.26 0.16 0.06 0.00 

[[2]] 
[1] 1.00 0.98 0.84 0.74 0.66 0.56 0.48 0.38 0.26 0.16 0.06 0.00 

[[3]] 
[1] 1.00 0.94 0.84 0.74 0.66 0.56 0.48 0.36 0.26 0.16 0.06 0.00 

[[4]] 
[1] 1.000000e+00 9.400000e-01 8.400000e-01 7.400000e-01 6.600000e-01 5.800000e-01 4.600000e-01 3.600000e-01 2.600000e-01 1.600000e-01 6.000000e-02 1.110223e-16 
+1

只是爲了好玩,嘗試運行'lapply(myList中,STR)',並告訴我們的結果是什麼 –

回答

1

如果你想浮點數中顯示四捨五入至小數點後第二位,然後使用:

lapply(mylist, round, digits=2) 

這種方法有它返回的數值模式的優勢在於它的格式()調用不會,它可以也可以用數字規範,是「長」使用,並可能是一個有效的「零過濾」:

lapply(list(c(1,2), c(1.000000e+00, 9.400000e-01, 6.000000e-02, 1.110223e-16)), round, 

digits=13) 
[[1]] 
[1] 1 2 

[[2]] 
[1] 1.00 0.94 0.06 0.00 
+0

按我的意願正常工作。謝謝 – Bob

0

我不確定R用來選擇格式的確切算法。很明顯,每個列表中的所有值都使用單一格式。同樣清楚的是,最後一個列表包含極大不同數量級的值:1.000000e+001.110223e-16。因此,我認爲R選擇使用科學記數法打印最後一份清單是合理的。

+0

不像1.11e-16實際上是零。 –

+0

@Dirk:不清楚你的意思。無論1e-16是否爲二元舍入誤差,事實是R是「選擇」科學記數法,因爲列表中的值超出了當前選項()$ scipen限制。 –

2

正如我在第一次發表評論時所評論的那樣,這是您的上一個問題的後續評論,這更像是一個顯示問題。最後一個數字實際上爲零的是:

R> identical(0, 1.1e-16) 
[1] FALSE 
R> all.equal(0, 1.1e-16) 
[1] TRUE 
R> 

雖然它的二進制表示不爲零,它計算的東西在大多數情況下足夠接近。所以你可以對你的數據運行一個過濾器並用零代替'near-zeros',或者你可以調試代碼,看看它是如何/爲什麼以非零的形式出現。

另請參閱有關浮點計算相關問題的R常見問題和一般參考資料。