错误整数溢出-在gapminder数据集中使用sum(作为.numeric(.))[1]NA

错误整数溢出-在gapminder数据集中使用sum(作为.numeric(.))[1]NA,r,sum,integer,R,Sum,Integer,我在玩gapminder数据集,当尝试对总体进行求和时,一个整数变量,一个错误 library(gapminder) 显示NA作为结果 那么,如果你尝试 mean(gapminder$pop) [1] 29601212 # ok, as expected 但如果 sum(gapminder$pop) integer overflow - use sum(as.numeric(.))[1] NA 我读了报纸 所以,我试过了 sum(gapminder$pop / 1) [1] 50440465

我在玩gapminder数据集,当尝试对总体进行求和时,一个整数变量,一个错误

library(gapminder)

显示NA作为结果

那么,如果你尝试

mean(gapminder$pop)
[1] 29601212 # ok, as expected
但如果

sum(gapminder$pop)
integer overflow - use sum(as.numeric(.))[1] NA
我读了报纸

所以,我试过了

sum(gapminder$pop / 1)
[1] 50440465801
有没有解释为什么sum不起作用,但是sum/1起作用

简言之:为什么

gapminder %>%
    group_by(year) %>% 
    summarise(totalPop = sum(pop))

但是


除以1将强制为数字

library(gapminder)
class(sum(gapminder$pop))
[1] "integer"
Warning message:
In sum(gapminder$pop) : integer overflow - use sum(as.numeric(.))

class(sum(gapminder$pop/1))
[1] "numeric"

谢谢,有道理。不管怎样,有什么线索可以解释为什么sum(pop)给出NA吗?sum(pop)给出NA是因为整数溢出。即,pop的总和大于允许的整数范围。数值不受整数范围的限制。谢谢。了解了。Machine$integer.max#>[1]2147483647有没有更正式的方法?除以1似乎是一种变通方法。
gapminder %>%
    group_by(year) %>% 
    summarise(totalPop = sum(pop/1))
library(gapminder)
class(sum(gapminder$pop))
[1] "integer"
Warning message:
In sum(gapminder$pop) : integer overflow - use sum(as.numeric(.))

class(sum(gapminder$pop/1))
[1] "numeric"