簡體   English   中英

R類會更改數值嗎?

[英]Do R classes change numeric values?

由於我在這里已經遇到過類似的問題,所以我遇到了另一個問題: stats::t.test返回的p-value < 2.2e-16 但是從數學中我得到p_value <- 2 * pt(-abs(t), df) # [1] 1.929352e-17 怎么了?

我剛剛開始按照那里的建議進行調試:

debug(stats:::t.test.default)
vals <- data.frame(a = c(4, 2, 4, 7, 3, 4, 8, 8, 3, 0, 1, 5, 4, 6, 4, 8, 7, 
                         9, 6, 6, 3, 6, 7, 4), 
                   b = c(5, 7, 6, 13, 12, 6, 14, 16, 4, 2, 7, 7, 4, 8, 9, 9, 
                         11, 13, 12, 8, 3, 8, 7, 7))

stats::t.test(x = vals)
# One Sample t-test
# data:  vals
# t = 13.214, df = 47, p-value < 2.2e-16

然后逐步走到第98行,

在此處輸入圖片說明

其中pval評估為1.929352e-17 ,這是我期望的。 這一直保持不變,直到第112行,其中將類設置為class(rval) <- "htest"

在此處輸入圖片說明

怎么了? 類會改變值嗎? 不幸的是,我不知道如何理解/調試第112行后面的代碼。

不會。類不會更改值,但它們會更改其打印方式。 由於返回的類是htest對象,因此使用stats:::print.htest()繪制結果。 為了使內容更美觀,此函數將數字格式化,以便它們具有合理的小數位數。 它使用format.pval函數使p值看起來很漂亮。 在p值變得很小之后,顯示所有數字並沒有多大意義,因此R只是在某個時候告訴您它小於certian值。 例如

format.pval(1e-20)
# [1] "< 2.22e-16

“真實”值仍存儲在對象中

x <- stats::t.test(x = vals)
x$p.value
# [1] 1.929352e-17

這是R中非常常見的模式,其中僅print()賦值並不一定顯示那里的“真正”內容。 這只是該對象的漂亮展示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM