S4 class slot type S4 class

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

S4 class slot type S4 class

Glenn Schultz
All,

I am considering creating an S4 class whose slots (2) are both S4 classes.  Since an S4 slot can be an S3 class I figure this can be done.  However, the correct syntax of which I am unsure.  Reviewing the docs I have come to the following conclusion:

SetClass('myfoo',
                  slots = (foo1, foo2))

Without a type I believe each slot is .Data.  A get method on the above class slots would return say foo1 which will have all methods and generics belonging to foo1 class.  Is this the correct approach?

Best,
Glenn
______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: S4 class slot type S4 class

Martin Morgan-3


On 05/21/2018 12:06 AM, Glenn Schultz wrote:

> All,
>
> I am considering creating an S4 class whose slots (2) are both S4
> classes.  Since an S4 slot can be an S3 class I figure this can be done.
>   However, the correct syntax of which I am unsure.  Reviewing the docs
> I have come to the following conclusion:
>
> SetClass('myfoo',
>                    slots = (foo1, foo2))
>
> Without a type I believe each slot is .Data.  A get method on the above
> class slots would return say foo1 which will have all methods and
> generics belonging to foo1 class.  Is this the correct approach?

Suppose you have two classes

   .A = setClass("A", slots = c(x = "numeric"))
   .B = setClass("B", slots = c(y = "numeric", z = "numeric"))

A third class containing these would be

   .C = setClass("C", slots = c(a = "A", b = "B"))

where names of the slot argument are the slot names, and the character
strings "A", "B" are the type of object the slot will store.

 > .C()
An object of class "C"
Slot "a":
An object of class "A"
Slot "x":
numeric(0)


Slot "b":
An object of class "B"
Slot "y":
numeric(0)

Slot "z":
numeric(0)


 > .C(a = .A(x = 1:2), b = .B(y = 2:1, z = 1:2))
An object of class "C"
Slot "a":
An object of class "A"
Slot "x":
[1] 1 2


Slot "b":
An object of class "B"
Slot "y":
[1] 2 1

Slot "z":
[1] 1 2



Martin Morgan

>
> Best,
> Glenn
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.


This email message may contain legally privileged and/or...{{dropped:2}}

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.