[英]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
參數是numeric
且length == 1
則hist.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.