第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

R如何用小數(shù)秒格式化POSIXct

R如何用小數(shù)秒格式化POSIXct

手掌心 2019-08-27 13:39:23
R如何用小數(shù)秒格式化POSIXct我認(rèn)為R錯(cuò)誤地使用小數(shù)秒格式化POSIXct類(lèi)型。我通過(guò)R-bugs作為增強(qiáng)請(qǐng)求提交了這個(gè),并且“我們認(rèn)為當(dāng)前的行為是正確的 - 刪除了bug”。雖然我非常感謝他們已經(jīng)完成并將繼續(xù)做的工作,但我想讓其他人對(duì)這個(gè)特定問(wèn)題采取行動(dòng),并且可能就如何更有效地提出要點(diǎn)提出建議。這是一個(gè)例子: > tt <- as.POSIXct('2011-10-11 07:49:36.3')  > strftime(tt,'%Y-%m-%d %H:%M:%OS1')  [1] "2011-10-11 07:49:36.2"也就是說(shuō),tt被創(chuàng)建為POSIXct時(shí)間,小數(shù)部分.3秒。當(dāng)使用一個(gè)十進(jìn)制數(shù)字打印時(shí),顯示的值為.2。我使用毫秒級(jí)精度的時(shí)間戳工作很多,這讓我很煩惱,因?yàn)闀r(shí)間通常比實(shí)際值低一個(gè)等級(jí)。以下是發(fā)生的事情:POSIXct是自紀(jì)元以來(lái)的浮點(diǎn)秒數(shù)。精確處理所有整數(shù)值,但在base-2浮點(diǎn)中,與.3最接近的值略小于.3。strftime()格式的所述行為%OSn是向下舍入到請(qǐng)求的小數(shù)位數(shù),因此顯示的結(jié)果為.2。對(duì)于其他小數(shù)部分,浮點(diǎn)值略高于輸入的值,顯示屏給出預(yù)期結(jié)果: > tt <- as.POSIXct('2011-10-11 07:49:36.4')  > strftime(tt,'%Y-%m-%d %H:%M:%OS1')  [1] "2011-10-11 07:49:36.4"開(kāi)發(fā)人員的論點(diǎn)是,對(duì)于時(shí)間類(lèi)型,我們應(yīng)該總是向下舍入到請(qǐng)求的精度。例如,如果時(shí)間是11:59:59.8,那么用格式打印它%H:%M應(yīng)該給出“11:59”而不是“12:00”,并且%H:%M:%S 應(yīng)該給出“11:59:59”而不是“12:00:00”。我同意這個(gè)整數(shù)秒和格式標(biāo)志%S,但我認(rèn)為對(duì)于為秒的小數(shù)部分設(shè)計(jì)的格式標(biāo)志,行為應(yīng)該是不同的。我希望看到%OSn使用舍入到最近的行為,即使是n = 0同時(shí)%S使用循環(huán)下來(lái),從而使打印11:59:59.8與格式%H:%M:%OS0會(huì)給“12:00:00”。這不會(huì)影響整數(shù)秒的任何事情,因?yàn)樗鼈兛偸蔷_地表示,但它會(huì)更自然地處理小數(shù)秒的舍入誤差。這就是如何處理小數(shù)部分的打印,例如C,因?yàn)檎麛?shù)轉(zhuǎn)換向下舍入: double x = 9.97;  printf("%d\n",(int) x);   //  9  printf("%.0f\n",x);       //  10  printf("%.1f\n",x);       //  10.0  printf("%.2f\n",x);       //  9.97我做了一個(gè)關(guān)于如何在其他語(yǔ)言和環(huán)境中處理小數(shù)秒的快速調(diào)查,并且似乎確實(shí)沒(méi)有達(dá)成共識(shí)。大多數(shù)構(gòu)造設(shè)計(jì)為整數(shù)秒,而小數(shù)部分是事后想法。在我看來(lái),在這種情況下,R開(kāi)發(fā)人員做出的選擇并非完全不合理,但實(shí)際上并不是最好的選擇,并且與其他地方用于顯示浮點(diǎn)數(shù)的約定不一致。人們的想法是什么?R行為是否正確?這是你自己設(shè)計(jì)它的方式嗎?
查看完整描述

2 回答

?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊


一個(gè)潛在的問(wèn)題是POSIXct表示不如POSIXlt表示精確,并且POSIXct表示在格式化之前轉(zhuǎn)換為POSIXlt表示。下面我們看到如果我們的字符串直接轉(zhuǎn)換為POSIXlt表示,它輸出正確。


> as.POSIXct('2011-10-11 07:49:36.3')

[1] "2011-10-11 07:49:36.2 CDT"

> as.POSIXlt('2011-10-11 07:49:36.3')

[1] "2011-10-11 07:49:36.3"

我們還可以通過(guò)查看兩種格式的二進(jìn)制表示與0.3的通常表示之間的差異來(lái)看到。


> t1 <- as.POSIXct('2011-10-11 07:49:36.3')

> as.numeric(t1 - round(unclass(t1))) - 0.3

[1] -4.768372e-08


> t2 <- as.POSIXlt('2011-10-11 07:49:36.3')

> as.numeric(t2$sec - round(unclass(t2$sec))) - 0.3

[1] -2.831069e-15

有趣的是,看起來(lái)兩個(gè)表示實(shí)際上都比0.3的通常表示要小,但是第二個(gè)表示要么足夠接近,要么截?cái)嗟姆绞脚c我想象的不同。鑒于此,我不會(huì)擔(dān)心浮點(diǎn)表示困難; 它們可能仍然會(huì)發(fā)生,但如果我們小心使用哪種表示方式,它們有望最小化。


羅伯特對(duì)圓形輸出的渴望只是輸出問(wèn)題,可以通過(guò)多種方式解決。我的建議是這樣的:


myformat.POSIXct <- function(x, digits=0) {

  x2 <- round(unclass(x), digits)

  attributes(x2) <- attributes(x)

  x <- as.POSIXlt(x2)

  x$sec <- round(x$sec, digits)

  format.POSIXlt(x, paste("%Y-%m-%d %H:%M:%OS",digits,sep=""))

}

這從POSIXct輸入開(kāi)始,并首先輪到所需的數(shù)字; 然后轉(zhuǎn)換為POSIXlt并再次舍入。第一輪舍入確保當(dāng)我們處于分鐘/小時(shí)/天邊界時(shí)所有單元都適當(dāng)增加; 轉(zhuǎn)換為更精確的表示后的第二輪四舍五入。


> options(digits.secs=1)

> t1 <- as.POSIXct('2011-10-11 07:49:36.3')

> format(t1)

[1] "2011-10-11 07:49:36.2"

> myformat.POSIXct(t1,1)

[1] "2011-10-11 07:49:36.3"


> t2 <- as.POSIXct('2011-10-11 23:59:59.999')

> format(t2)

[1] "2011-10-11 23:59:59.9"

> myformat.POSIXct(t2,0)

[1] "2011-10-12 00:00:00"

> myformat.POSIXct(t2,1)

[1] "2011-10-12 00:00:00.0"

最后一個(gè):你知道標(biāo)準(zhǔn)允許最多兩個(gè)閏秒嗎?


> as.POSIXlt('2011-10-11 23:59:60.9')

[1] "2011-10-11 23:59:60.9"

好的,還有一件事。由于OP提交的錯(cuò)誤,該行為實(shí)際上在5月發(fā)生了變化(錯(cuò)誤14579); 在那之前,它確實(shí)是小數(shù)秒。不幸的是,這意味著有時(shí)它可以繞到一秒鐘是不可能的; 在錯(cuò)誤報(bào)告中,當(dāng)它應(yīng)該轉(zhuǎn)到下一分鐘時(shí),它上升到60。決定截?cái)喽皇巧崛氲囊粋€(gè)原因是它是從POSIXlt表示打印的,其中每個(gè)單元是分開(kāi)存儲(chǔ)的。因此,滾動(dòng)到下一分鐘/小時(shí)/等比僅僅簡(jiǎn)單的舍入操作更困難。要輕松舍入,有必要在POSIXct表示中進(jìn)行舍入,然后按照我的建議轉(zhuǎn)換回來(lái)。


查看完整回答
反對(duì) 回復(fù) 2019-08-27
  • 2 回答
  • 0 關(guān)注
  • 987 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)