在讨论S4 prototypes时,哈德利表示
年龄的空值可能不是您想要的
相反,他将默认值设置为NA
。这是代码
setClass("Person", representation(name = "character", age = "numeric"))
要访问使用@的S4对象的插槽,而不是$:
hadley <- new("Person", name = "Hadley")
hadley@age
# numeric(0)
年龄的空值可能不是您想要的,因此您还可以为该类分配默认原型:
setClass("Person", representation(name = "character", age = "numeric"),
prototype(name = NA_character_, age = NA_real_))
hadley <- new("Person", name = "Hadley")
hadley@age
# [1] NA
设置NA
原型而不是将其留空有什么好处?
它是否仅影响您检查插槽是否具有非默认值的方式?即length(hadley@age) == 0
vs is.na(hadley@age)
?
答案 0 :(得分:1)
我能想到的一个原因是NA
的计算默认情况下会给NA
。假设您使用Person的第一个定义
#your first definition of Person
setClass("Person", representation(name = "character", age = "numeric"))
hadley <- new("Person", name = "Hadley")
#new Person
Alex<-new("Person", name = "Alex",age=99)
#calculate mean age of two Persons
mean(unlist(lapply(list(hadley,Alex),function(person) person@age)))
#99
可能是您错误地推断样本中的平均年龄为99
,而您却不知道Hadley的年龄。
对于Person的第二个定义,您将获得NA
setClass("Person", representation(name = "character", age = "numeric"),
prototype(name = NA_character_, age = NA_real_))
hadley <- new("Person", name = "Hadley")
Alex<-new("Person", name = "Alex",age=99)
mean(unlist(lapply(list(hadley,Alex),function(person) person@age)))
#NA