hadley / adv-r

Advanced R: a book
http://adv-r.hadley.nz
Other
2.35k stars 1.71k forks source link

Confusion in 15.3.4 #1715

Open sebffischer opened 2 years ago

sebffischer commented 2 years ago

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?

sebffischer commented 2 years ago

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