2

I was playing with the gapminder dataset, and when trying to sum the population, an integer variable, an error

library(gapminder)

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

Shows NA as results

Then, if try

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

but if

sum(gapminder$pop)
integer overflow - use sum(as.numeric(.))[1] NA

I read the What is integer overflow in R and how can it happen?

so, I tried

sum(gapminder$pop / 1)
[1] 50440465801

Any explanation why sum doesn't work, but sum / 1 did?

In brief: why?

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

enter image description here

but

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

enter image description here

sergiouribe
  • 221
  • 1
  • 3
  • 11

1 Answers1

2

Dividing by 1 coerces it numeric.

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"
jmuhlenkamp
  • 2,102
  • 1
  • 14
  • 37