[Rd] format: different S4 behavior in a package

2010-06-23 Thread Daniel Murphy
R-Devel-ers:

I have an S4 method that simply formats an object:

setGeneric(formatMe, function(x) standardGeneric(formatMe))
setMethod(formatMe, ANY, function(x) format(x))

If I issue the above in an R session, then define an S4 class with its own
format method, I get the desired result:

 setClass(A,contains=numeric)
[1] A
 setMethod(format,A, function(x, ...) Hey Jude)
Creating a new generic function for format in .GlobalEnv
[1] format
 a-new(A,1968)
 formatMe(a)
[1] Hey Jude


However, if I put the two formatMe definitions into a package (Test), I
do not get the desired result.
start new R session

 library(Test)
 setClass(A,contains=numeric)
[1] A
 setMethod(format,A, function(x, ...) Hey Jude)
Creating a new generic function for format in .GlobalEnv
[1] format
 a-new(A,1968)
 formatMe(a)
[1] 1968


The disconnect does not occur, however, if the S4 format method is an S3
incarnation:

 setClass(B,contains=numeric,S3methods=TRUE)
[1] B
 format.B - function(x, ...) Don't make it bad
 b-new(B,1968)
 formatMe(b)
[1] Don't make it bad

Could the problem be in Test's NAMESPACE file? There is only one line:
exportMethods(formatMe)

Here is Test's DESCRIPTION file:
Package: Test
Type: Package
Title: Testing format
Version: 1.0
Date: 2010-06-22
Author: Dan Murphy
Maintainer: Dan Murphy snipped
Depends: methods
Description: Does format in a package work with S4 format method?
License: GPL (= 2)
LazyLoad: yes

(I would send the Help file, but I don't think that is the problem.)

I am using version 2.11.1 on a Windows Vista machine.

Any guidance would be appreciated. Thank you

Dan Murphy

[[alternative HTML version deleted]]

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] format: different S4 behavior in a package

2010-06-23 Thread Uwe Ligges

There is not a single definition of
formatMe()
in your message, therefore nothing works for me, not even the very first 
version...


Best,
Uwe Ligges


On 23.06.2010 09:16, Daniel Murphy wrote:

R-Devel-ers:

I have an S4 method that simply formats an object:

setGeneric(formatMe, function(x) standardGeneric(formatMe))
setMethod(formatMe, ANY, function(x) format(x))

If I issue the above in an R session, then define an S4 class with its own
format method, I get the desired result:


setClass(A,contains=numeric)

[1] A

setMethod(format,A, function(x, ...) Hey Jude)

Creating a new generic function for format in .GlobalEnv
[1] format

a-new(A,1968)
formatMe(a)

[1] Hey Jude


However, if I put the two formatMe definitions into a package (Test), I
do not get the desired result.
start new R session


library(Test)
setClass(A,contains=numeric)

[1] A

setMethod(format,A, function(x, ...) Hey Jude)

Creating a new generic function for format in .GlobalEnv
[1] format

a-new(A,1968)
formatMe(a)

[1] 1968


The disconnect does not occur, however, if the S4 format method is an S3
incarnation:


setClass(B,contains=numeric,S3methods=TRUE)

[1] B

format.B- function(x, ...) Don't make it bad
b-new(B,1968)
formatMe(b)

[1] Don't make it bad

Could the problem be in Test's NAMESPACE file? There is only one line:
exportMethods(formatMe)

Here is Test's DESCRIPTION file:
Package: Test
Type: Package
Title: Testing format
Version: 1.0
Date: 2010-06-22
Author: Dan Murphy
Maintainer: Dan Murphysnipped
Depends: methods
Description: Does format in a package work with S4 format method?
License: GPL (= 2)
LazyLoad: yes

(I would send the Help file, but I don't think that is the problem.)

I am using version 2.11.1 on a Windows Vista machine.

Any guidance would be appreciated. Thank you

Dan Murphy

[[alternative HTML version deleted]]

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] format: different S4 behavior in a package

2010-06-23 Thread Martin Morgan
On 06/23/2010 12:16 AM, Daniel Murphy wrote:
 R-Devel-ers:
 
 I have an S4 method that simply formats an object:
 
 setGeneric(formatMe, function(x) standardGeneric(formatMe))
 setMethod(formatMe, ANY, function(x) format(x))
 
 If I issue the above in an R session, then define an S4 class with its own
 format method, I get the desired result:
 
 setClass(A,contains=numeric)
 [1] A
 setMethod(format,A, function(x, ...) Hey Jude)
 Creating a new generic function for format in .GlobalEnv
 [1] format
 a-new(A,1968)
 formatMe(a)
 [1] Hey Jude
 
 
 However, if I put the two formatMe definitions into a package (Test), I
 do not get the desired result.
 start new R session
 
 library(Test)
 setClass(A,contains=numeric)
 [1] A
 setMethod(format,A, function(x, ...) Hey Jude)
 Creating a new generic function for format in .GlobalEnv

This is the clue -- you're creating a new S4 generic, so there's a
base::format, and a .GlobalEnv::format. Test::formatMe respects its name
space, and sees base::format.

In the S3 case, base::format is already an S3 generic, and you're just
adding a method, so there's only base::format for everyone to find.

In Test, you could setGeneric(format) and then export(format). It might
also be enough to just export(format); I'm not sure.

Martin

 [1] format
 a-new(A,1968)
 formatMe(a)
 [1] 1968
 
 
 The disconnect does not occur, however, if the S4 format method is an S3
 incarnation:
 
 setClass(B,contains=numeric,S3methods=TRUE)
 [1] B
 format.B - function(x, ...) Don't make it bad
 b-new(B,1968)
 formatMe(b)
 [1] Don't make it bad
 
 Could the problem be in Test's NAMESPACE file? There is only one line:
 exportMethods(formatMe)
 
 Here is Test's DESCRIPTION file:
 Package: Test
 Type: Package
 Title: Testing format
 Version: 1.0
 Date: 2010-06-22
 Author: Dan Murphy
 Maintainer: Dan Murphy snipped
 Depends: methods
 Description: Does format in a package work with S4 format method?
 License: GPL (= 2)
 LazyLoad: yes
 
 (I would send the Help file, but I don't think that is the problem.)
 
 I am using version 2.11.1 on a Windows Vista machine.
 
 Any guidance would be appreciated. Thank you
 
 Dan Murphy
 
   [[alternative HTML version deleted]]
 
 __
 R-devel@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-devel


-- 
Martin Morgan
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] format: different S4 behavior in a package

2010-06-23 Thread Daniel Murphy
Thank you, Martin. That worked. And fyi 'export(format)' alone was not
sufficient.
Best,
Dan

On Wed, Jun 23, 2010 at 5:15 AM, Martin Morgan mtmor...@fhcrc.org wrote:

 On 06/23/2010 12:16 AM, Daniel Murphy wrote:
  R-Devel-ers:
 
  I have an S4 method that simply formats an object:
 
  setGeneric(formatMe, function(x) standardGeneric(formatMe))
  setMethod(formatMe, ANY, function(x) format(x))
 
  If I issue the above in an R session, then define an S4 class with its
 own
  format method, I get the desired result:
 
  setClass(A,contains=numeric)
  [1] A
  setMethod(format,A, function(x, ...) Hey Jude)
  Creating a new generic function for format in .GlobalEnv
  [1] format
  a-new(A,1968)
  formatMe(a)
  [1] Hey Jude
 
 
  However, if I put the two formatMe definitions into a package (Test),
 I
  do not get the desired result.
  start new R session
 
  library(Test)
  setClass(A,contains=numeric)
  [1] A
  setMethod(format,A, function(x, ...) Hey Jude)
  Creating a new generic function for format in .GlobalEnv

 This is the clue -- you're creating a new S4 generic, so there's a
 base::format, and a .GlobalEnv::format. Test::formatMe respects its name
 space, and sees base::format.

 In the S3 case, base::format is already an S3 generic, and you're just
 adding a method, so there's only base::format for everyone to find.

 In Test, you could setGeneric(format) and then export(format). It might
 also be enough to just export(format); I'm not sure.

 Martin

  [1] format
  a-new(A,1968)
  formatMe(a)
  [1] 1968
 
 
  The disconnect does not occur, however, if the S4 format method is an
 S3
  incarnation:
 
  setClass(B,contains=numeric,S3methods=TRUE)
  [1] B
  format.B - function(x, ...) Don't make it bad
  b-new(B,1968)
  formatMe(b)
  [1] Don't make it bad
 
  Could the problem be in Test's NAMESPACE file? There is only one line:
  exportMethods(formatMe)
 
  Here is Test's DESCRIPTION file:
  Package: Test
  Type: Package
  Title: Testing format
  Version: 1.0
  Date: 2010-06-22
  Author: Dan Murphy
  Maintainer: Dan Murphy snipped
  Depends: methods
  Description: Does format in a package work with S4 format method?
  License: GPL (= 2)
  LazyLoad: yes
 
  (I would send the Help file, but I don't think that is the problem.)
 
  I am using version 2.11.1 on a Windows Vista machine.
 
  Any guidance would be appreciated. Thank you
 
  Dan Murphy
 
[[alternative HTML version deleted]]
 
  __
  R-devel@r-project.org mailing list
  https://stat.ethz.ch/mailman/listinfo/r-devel


 --
 Martin Morgan
 Computational Biology / Fred Hutchinson Cancer Research Center
 1100 Fairview Ave. N.
 PO Box 19024 Seattle, WA 98109

 Location: Arnold Building M1 B861
 Phone: (206) 667-2793


[[alternative HTML version deleted]]

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel