hadley/adv-r

Confusion in 15.3.4

sebffischer opened this issue · 1 comments

The section mentions, that the helper to construct a Person object converts the age to a double so that it also works with integers, however the following is fine for me

setClass("Person",
  slots = c(
    name = "character",
    age = "numeric"
  )
)

john = new("Person", name = "John Smith", age = 12L)

Created on 2021-12-13 by the reprex package (v2.0.1)

What exactly is meant here?

Ok, admittedly

setClass("Person",
  slots = c(
    name = "character",
    age = "numeric"
  )
)
Person <- function(name, age = NA) {
  new("Person", name = name, age = age)
}

Person("John Smith")
#> Error in validObject(.Object): invalid class "Person" object: invalid object for slot "age" in class "Person": got class "logical", should be or extend class "numeric"

Created on 2021-12-13 by the reprex package (v2.0.1)

but then it would be clearer if one would just use

Person <- function(name, age = NA_real_) {
  new("Person", name = name, age = age)
}

Created on 2021-12-13 by the reprex package (v2.0.1)

otherwise it kind of suggests that intergers are not numeric