2017-10-16 111 views
0

生成直方圖時,我有包含文本的文件:錯誤中的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 

可能是那是什麼促使這個錯誤的問題一起產生一個錯誤?

回答

0

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

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獨特的列的默認名稱。

+0

和你一樣,我沒有得到上面的數據的警告,但我可以用更少的休息複製它。我猜這個問題與休息時間太短有關,問題中的數據集不是完整的。 – Eumenedies

2

既然你問什麼在這裏可以導致錯誤是:當hist.default函數計算直方圖的中點創建

錯誤。這個矢量mids <- 0.5 * (breaks[-1L] + breaks[-nB])計算每個休息點之間的中點。這個問題的產生是因爲符爲整數生成:

如果參數breaksnumericlength == 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返回數字時,這不是問題。

參見:What is integer overflow in R and how can it happen?

在實踐中,這一切意味着,如果你打印出hist結構中返回,所有mids值將是NA,但我不認爲它實際上影響的繪圖直方圖。因此這只是一個警告。

編輯: pretty內部使用seq.int