From Matthias.Kohl at stamats.de  Tue Dec  6 13:36:29 2005
From: Matthias.Kohl at stamats.de (Matthias Kohl)
Date: Tue, 06 Dec 2005 13:36:29 +0100
Subject: [Rd] problems with initialize-method,
	difference between Win XP & Linux
Message-ID: <439585CD.1080800@stamats.de>

Dear R devels,

I have some questions concerning the use of "initialize".

Situation:
There are two packages "S4pkg1" and "S4pkg2" which include S4 classes 
and methods where the first one contains a new S4 class "S4pkg1Class".
Then, in "S4pkg2" there is a new S4 class "S4pkg2Class" which has a slot 
of class "S4pkg1Class". Both packages have a namespace where I use 
exportClasses("S4pkg1Class") in the namespace of "S4pkg1" and 
import("S4pkg1") in the namespace of "S4pkg2".

#############
1. Solution:
I provide a prototype argument in the definition of "S4pkg1Class" and 
use new("S4pkg1Class") in the prototype of "S4pkg2Class".
Then, everything works fine under Windows XP and (Suse 9.3) Linux using 
R 2.2.0 and R 2.3.0 devel; i.e., calling "new("S4pkg2Class")" returns an 
object of class "S4pkg2Class" and the slot of class "S4pkg1Class" is 
filled with the corresponding prototype.

#############
2. Solution:
I don't provide a prototype argument in the definition of "S4pkg1Class". 
Instead, I define an "initialize"-method for class "S4pkg1Class" with 
default arguments for the slots of "S4pkg1Class" and again I use 
"new("S4pkg1Class")" in the prototype of class "S4pkg2Class".
Moreover, I use exportMethods("initialize") in the namespace of package 
"S4pkg1".

Then, everything seems to work fine (at least on my PC) under Windows XP 
using R 2.2.0 and R 2.3.0 devel; i.e., calling "new("S4pkg2Class")" 
returns an object of class "S4pkg2Class" where the slot of class 
"S4pkg1Class" now is filled with the default object generated by the 
initialize-method of class "S4pkg1Class".
However, under (Suse 9.3) Linux using R 2.2.0 and R 2.3.0 devel 
"new("S4pkg2Class")" returns an object of class "S4pkg2Class" where the 
slot of class "S4pkg1Class" is not filled with the default object 
generated by the initialize-method of class "S4pkg1Class" but with a 
"default-protoype" (slots are filled with "numeric(0)", "character(0)", 
...).

Can someone confirm this behavior?

The sources of two sample packages can be found under:
http://www.stamats.de/S4pkg1_0.1-1.tar.gz
and
http://www.stamats.de/S4pkg2_0.1-1.tar.gz

After installation please try:
require(S4pkg1)
new("S4pkg1Class") # o.k., default values of initialize are used

require(S4pkg2)
new("S4pkg2Class") # is slot "pkg1" filled with the output of 
new("S4pkg1Class") given above???

Why does this work under Windows XP but not under (Suse 9.3) Linux?
Am I doing something wrong - or is this a bug?

Many thanks for any help!
Matthias

-- 
StaMatS - Statistik + Mathematik Service
Dipl.Math.(Univ.) Matthias Kohl
www.stamats.de



[Rd] problems with initialize-method, difference between Win XP & Linux
Matthias Kohl