簡體   English   中英

在R中生成直方圖時出錯

[英]Error when generating histogram in R

我有一個包含以下內容的文本文件:

Tue Feb 11 12:19:39 +0000 2014
Tue Feb 11 12:19:56 +0000 2014
Tue Feb 11 12:20:04 +0000 2014

我讀進了r

dataset <- read.csv("Time.txt")

為了讓R識別文件中的時間戳,我寫道:

time <- strptime(dataset[,1], format = "%a %b %d %H:%M:%S %z %Y")

每當我嘗試繪制直方圖時:

hist(time, breaks = 100)

它與生成的直方圖一起產生錯誤

In breaks[-1L] + breaks[-nB] : NAs produced by integer overflow

可能是導致此錯誤的問題?

由於您詢問了什么可能導致錯誤,所以它是:

hist.default函數計算直方圖的中點時,會創建該錯誤。 此向量中值mids <- 0.5 * (breaks[-1L] + breaks[-nB])計算每個中斷之間的中點。 出現此問題是因為中斷是作為整數生成的:

如果breaks參數是numericlength == 1hist.default函數(由hist.POSIXt )會根據x的范圍和中斷次數創建breaks向量。 這是使用pretty命令完成的。 由於一些原因,我沒有仔細研究,如果breaks足夠小,從而pretty(range(x),n=breaks, min.n = 1)僅返回每個值之一,例如:

pretty(range(x), n = 35, min.n = 1)
#[1] 1392121179 1392121180 1392121181 1392121182 1392121183 1392121184
#[7] 1392121185 1392121186 1392121187 1392121188 1392121189 1392121190
#[13] 1392121191 1392121192 1392121193 1392121194 1392121195 1392121196
#[19] 1392121197 1392121198 1392121199 1392121200 1392121201 1392121202
#[25] 1392121203 1392121204

那么輸出是integer類型。 但是,如果中斷次數較多,則某些輸出將重復:

pretty(range(x), n = 36, min.n = 1)
# [1] 1392121179 1392121180 1392121180 1392121181 1392121181 1392121182
# [7] 1392121182 1392121183 1392121183 1392121184 1392121184 1392121185
#[13] 1392121185 1392121186 1392121186 1392121187 1392121187 1392121188
#[19] 1392121188 1392121189 1392121189 1392121190 1392121190 1392121191
#[25] 1392121191 1392121192 1392121192 1392121193 1392121193 1392121194
#[31] 1392121194 1392121195 1392121195 1392121196 1392121196 1392121197
#[37] 1392121197 1392121198 1392121198 1392121199 1392121199 1392121200
#[43] 1392121200 1392121201 1392121201 1392121202 1392121202 1392121203
#[49] 1392121203 1392121204 1392121204

然后輸出為numeric

因為R使用32位整數類型,並且POSIXt整數是大數,所以將兩個POSIXt整數相加會導致R無法處理並返回NA的溢出。 pretty返回數字時,這不是問題。

另請參閱: R中的整數溢出是什么以及如何發生?

實際上,所有這些意味着,如果您打印出返回的hist結構,則所有mids值都將為NA但我認為它實際上不會影響直方圖的繪制。 因此,這只是一個警告。

編輯: pretty內部使用seq.int

在我的環境中,它不會產生任何錯誤。

dataset <- read.csv("Time.txt", header = F)
time <- strptime(dataset[,1], format = "%a %b %d %H:%M:%S %z %Y")
hist(as.numeric(time), breaks = 100)

也許如果只是將時間轉換成上述數字,則錯誤將消失。 然后,很容易更改直方圖的x軸。

編輯: ggplot2不應該面對這個問題,它更加簡單和現代:

ggplot(dataset) + geom_histogram(aes(x = V1), stat = "count", bins = 100)

其中V1是read.csv()創建的dataset的唯一列的默認名稱。

暫無
暫無

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

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