From simon.urbanek at r-project.org  Wed Mar 26 17:24:53 2008
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Wed, 26 Mar 2008 12:24:53 -0400
Subject: [Rd] S4 slot with NA default
In-Reply-To: <00025495-F390-4A46-885E-5FAD2B4B66A7@noc.soton.ac.uk>
References: <00025495-F390-4A46-885E-5FAD2B4B66A7@noc.soton.ac.uk>
Message-ID: <3798E3A1-24F8-41FE-A1E4-5812AFC839D5@r-project.org>


On Mar 26, 2008, at 12:04 PM, Robin Hankin wrote:

> Hi
>
> How do I specify an S4 class with a slot that is potentially numeric,
> but NA
> by default?  I   want the slot to be NA until I calculate its value
>  (an expensive operation, not needed for all applications).   When
> its value is
> known, I  will create a new object with the correct value inserted in
> the slot.
>
> I want "NA" to signify "not known".
>
> My attempt fails because NA is not numeric:
>
>>
> setClass
> ("foo
> ",representation=representation(x="numeric"),prototype=list(x=NA))
> Error in makePrototypeFromClassDef(properties, ClassDef, immediate,
> where) :
>   in making the prototype for class "foo" elements of the prototype
> failed to match the corresponding slot class: x (class ?numeric? )
>>
>

Why don't you just initialize x with the correct type then? NA is  
logical, so either use as.numeric(NA) or NA_real_ (see ?NA)

Cheers,
S


> (the real application has other slots too).   I can
> use "NaN", which is numeric:
>
>>
> setClass
> ("foo 
> ",representation=representation(x="numeric"),prototype=list(x=NaN))
> [1] "foo"
>>
>
> But this is not the correct sense: to me "NaN" means "not a number"
> and I want
> the sense to be "not available".
>
>
>
> Any advice?
>
>
>
>
>
> --
> Robin Hankin
> Uncertainty Analyst and Neutral Theorist,
> National Oceanography Centre, Southampton
> European Way, Southampton SO14 3ZH, UK
>  tel  023-8059-7743
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>



[Rd] S4 slot with NA default
Simon Urbanek