Grokbase Groups R r-devel June 2011
FAQ
Dear list,

I was wondering if you could help me out in clarifying something:
Is it possible to use class "ANY" in slots/fields of formal classes if you
a) do not want to restrict valid classes of that field and
b) if you are making explicit use of class inheritance?

It seems to work in simple scenarios but produces errors when class
inheritance comes into play. So I was wondering if that's a feature or a
bug.

If using "ANY" is not the right way, I'd appreciate a pointer to how you
can to this.

See previous post with an example below.

Regards,
Janko
On 06/03/2011 01:53 AM, Janko Thyson wrote:
On 31.05.2011 18:17, Martin Morgan wrote:
On 05/30/2011 07:02 AM, Janko Thyson wrote:
Dear list,

I would like to set one specific Reference Class field to be of an
arbitrary class. Is there a class that all R objects inherit from? I
thought that "ANY" was something like this, but obviously that's not
true:
inherits(1:3, "ANY")
[1] FALSE
I can't speak to the implementation, but ANY functions as a base class
in terms of slot / field assignment and inheritance, e.g.,

setClass("A", representation(x="ANY"))
new("A", x=1:3)

Martin
Hi Martin,

sorry for the late response. The way you do it works. Yet, when you
declare dependencies more explicitly (contains=XY), then R complains. Is
this a feature or a bug (with respect to the "less explicit" way working
just fine)? See the example below:

# S4
setClass("A", representation(x="ANY"))
new("A", x=1:3)

setClass("A", representation(x="ANY"))
setClass("B", contains="A", representation(x="character"))
new("B", x=1:3)

# Reference Classes
setRefClass(
Class="A",
fields=list(
.PRIMARYDATA="ANY"
),
contains=c("VIRTUAL")
)
B <- setRefClass(
Class="B",
fields=list(
.PRIMARYDATA="character"
),
contains=c("A")
)
Bug, I'd say. Martin
Regards,
Janko
Regards,
Janko

[[alternative HTML version deleted]]

______________________________________________
r-help@r-project.org mailing list
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.

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

Location: M1-B861
Telephone: 206 667-2793

Search Discussions

  • John Chambers at Jun 3, 2011 at 5:13 pm
    Well, your mail is unclear as to what you expected, but there is one bug
    shown by your example.

    The behavior of S4 classes is sensible, at least as far as the example
    shows:

    setClass("A", representation(x="ANY")) [1] "A"
    setClass("B", contains="A", representation(x="character")) [1] "B"
    new("B", x=1:3)
    Error in validObject(.Object) :
    invalid class "B" object: invalid object for slot "x" in class "B":
    got class "integer", should be or extend class "character"

    You couldn't expect the new() call to work, as the error message clearly
    explains. A legitimate call does work:
    new("B", x = "abc")
    An object of class "B"
    Slot "x":
    [1] "abc"

    The reference classes should work the same way, but don't, as your
    example shows.

    A <- setRefClass(
    + Class="A",
    + fields=list(
    + .PRIMARYDATA="ANY"
    + ),
    + contains=c("VIRTUAL")
    + )
    B <- setRefClass(
    + Class="B",
    + fields=list(
    + .PRIMARYDATA="character"
    + ),
    + contains=c("A")
    + )
    Error in `insertFields<-`(`*tmp*`, value = "character") :
    The overriding class("character") of field ".PRIMARYDATA" is not a
    subclass of the existing field definition ("ANY")

    We'll fix that. And, yes, "ANY" is intended as a universal superclass,
    but is usually not mentioned explicitly.

    On 6/3/11 6:53 AM, Janko Thyson wrote:
    Dear list,

    I was wondering if you could help me out in clarifying something:
    Is it possible to use class "ANY" in slots/fields of formal classes if you
    a) do not want to restrict valid classes of that field and
    b) if you are making explicit use of class inheritance?

    It seems to work in simple scenarios but produces errors when class
    inheritance comes into play. So I was wondering if that's a feature or a
    bug.

    If using "ANY" is not the right way, I'd appreciate a pointer to how you
    can to this.

    See previous post with an example below.

    Regards,
    Janko
    On 06/03/2011 01:53 AM, Janko Thyson wrote:
    On 31.05.2011 18:17, Martin Morgan wrote:
    On 05/30/2011 07:02 AM, Janko Thyson wrote:
    Dear list,

    I would like to set one specific Reference Class field to be of an
    arbitrary class. Is there a class that all R objects inherit from? I
    thought that "ANY" was something like this, but obviously that's not
    true:
    inherits(1:3, "ANY")
    [1] FALSE
    I can't speak to the implementation, but ANY functions as a base class
    in terms of slot / field assignment and inheritance, e.g.,

    setClass("A", representation(x="ANY"))
    new("A", x=1:3)

    Martin
    Hi Martin,

    sorry for the late response. The way you do it works. Yet, when you
    declare dependencies more explicitly (contains=XY), then R complains. Is
    this a feature or a bug (with respect to the "less explicit" way working
    just fine)? See the example below:

    # S4
    setClass("A", representation(x="ANY"))
    new("A", x=1:3)

    setClass("A", representation(x="ANY"))
    setClass("B", contains="A", representation(x="character"))
    new("B", x=1:3)

    # Reference Classes
    setRefClass(
    Class="A",
    fields=list(
    .PRIMARYDATA="ANY"
    ),
    contains=c("VIRTUAL")
    )
    B<- setRefClass(
    Class="B",
    fields=list(
    .PRIMARYDATA="character"
    ),
    contains=c("A")
    )
    Bug, I'd say. Martin
    Regards,
    Janko
    Regards,
    Janko

    [[alternative HTML version deleted]]

    ______________________________________________
    R-help at r-project.org mailing list
    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.
  • Janko Thyson at Jun 6, 2011 at 1:28 pm
    Thanks a lot for your reply and I'm sorry if I didn't make it quite
    clear what I expected, but you got it right:

    I'd simply like to see the same behavior for Reference Classes as for S4
    classes when extending classes with "ANY" fields as featured in the
    example below.
    setClass("A", representation(x="ANY")) [1] "A"
    setClass("B", contains="A", representation(x="character")) [1] "B"
    new("B", x = "abc")
    An object of class "B"
    Slot "x":
    [1] "abc"

    Thanks for addressing this!

    Regards,
    Janko
    On 03.06.2011 19:13, John Chambers wrote:
    Well, your mail is unclear as to what you expected, but there is one
    bug shown by your example.

    The behavior of S4 classes is sensible, at least as far as the example
    shows:

    setClass("A", representation(x="ANY")) [1] "A"
    setClass("B", contains="A", representation(x="character")) [1] "B"
    new("B", x=1:3)
    Error in validObject(.Object) :
    invalid class "B" object: invalid object for slot "x" in class "B":
    got class "integer", should be or extend class "character"

    You couldn't expect the new() call to work, as the error message
    clearly explains. A legitimate call does work:
    new("B", x = "abc")
    An object of class "B"
    Slot "x":
    [1] "abc"

    The reference classes should work the same way, but don't, as your
    example shows.

    A <- setRefClass(
    + Class="A",
    + fields=list(
    + .PRIMARYDATA="ANY"
    + ),
    + contains=c("VIRTUAL")
    + )
    B <- setRefClass(
    + Class="B",
    + fields=list(
    + .PRIMARYDATA="character"
    + ),
    + contains=c("A")
    + )
    Error in `insertFields<-`(`*tmp*`, value = "character") :
    The overriding class("character") of field ".PRIMARYDATA" is not a
    subclass of the existing field definition ("ANY")

    We'll fix that. And, yes, "ANY" is intended as a universal
    superclass, but is usually not mentioned explicitly.

    On 6/3/11 6:53 AM, Janko Thyson wrote:
    Dear list,

    I was wondering if you could help me out in clarifying something:
    Is it possible to use class "ANY" in slots/fields of formal classes
    if you
    a) do not want to restrict valid classes of that field and
    b) if you are making explicit use of class inheritance?

    It seems to work in simple scenarios but produces errors when class
    inheritance comes into play. So I was wondering if that's a feature or a
    bug.

    If using "ANY" is not the right way, I'd appreciate a pointer to how you
    can to this.

    See previous post with an example below.

    Regards,
    Janko
    On 06/03/2011 01:53 AM, Janko Thyson wrote:
    On 31.05.2011 18:17, Martin Morgan wrote:
    On 05/30/2011 07:02 AM, Janko Thyson wrote:
    Dear list,

    I would like to set one specific Reference Class field to be of an
    arbitrary class. Is there a class that all R objects inherit from? I
    thought that "ANY" was something like this, but obviously that's not
    true:
    inherits(1:3, "ANY")
    [1] FALSE
    I can't speak to the implementation, but ANY functions as a base class
    in terms of slot / field assignment and inheritance, e.g.,

    setClass("A", representation(x="ANY"))
    new("A", x=1:3)

    Martin
    Hi Martin,

    sorry for the late response. The way you do it works. Yet, when you
    declare dependencies more explicitly (contains=XY), then R
    complains. Is
    this a feature or a bug (with respect to the "less explicit" way
    working
    just fine)? See the example below:

    # S4
    setClass("A", representation(x="ANY"))
    new("A", x=1:3)

    setClass("A", representation(x="ANY"))
    setClass("B", contains="A", representation(x="character"))
    new("B", x=1:3)

    # Reference Classes
    setRefClass(
    Class="A",
    fields=list(
    .PRIMARYDATA="ANY"
    ),
    contains=c("VIRTUAL")
    )
    B<- setRefClass(
    Class="B",
    fields=list(
    .PRIMARYDATA="character"
    ),
    contains=c("A")
    )
    Bug, I'd say. Martin
    Regards,
    Janko
    Regards,
    Janko

    [[alternative HTML version deleted]]

    ______________________________________________
    R-help at r-project.org mailing list
    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.
    ______________________________________________
    R-devel at r-project.org mailing list
    https://stat.ethz.ch/mailman/listinfo/r-devel
  • John Chambers at Jun 6, 2011 at 4:29 pm
    Should now behave as expected in r-devel and 2.13 patched, as of SVN
    56045, June 4. (noted in the NEWS file.)

    On 6/6/11 6:27 AM, Janko Thyson wrote:
    Thanks a lot for your reply and I'm sorry if I didn't make it quite
    clear what I expected, but you got it right:

    I'd simply like to see the same behavior for Reference Classes as for S4
    classes when extending classes with "ANY" fields as featured in the
    example below.
    setClass("A", representation(x="ANY")) [1] "A"
    setClass("B", contains="A", representation(x="character")) [1] "B"
    new("B", x = "abc")
    An object of class "B"
    Slot "x":
    [1] "abc"

    Thanks for addressing this!

    Regards,
    Janko
    On 03.06.2011 19:13, John Chambers wrote:
    Well, your mail is unclear as to what you expected, but there is one
    bug shown by your example.

    The behavior of S4 classes is sensible, at least as far as the example
    shows:

    setClass("A", representation(x="ANY")) [1] "A"
    setClass("B", contains="A", representation(x="character")) [1] "B"
    new("B", x=1:3)
    Error in validObject(.Object) :
    invalid class "B" object: invalid object for slot "x" in class "B":
    got class "integer", should be or extend class "character"

    You couldn't expect the new() call to work, as the error message
    clearly explains. A legitimate call does work:
    new("B", x = "abc")
    An object of class "B"
    Slot "x":
    [1] "abc"

    The reference classes should work the same way, but don't, as your
    example shows.

    A <- setRefClass(
    + Class="A",
    + fields=list(
    + .PRIMARYDATA="ANY"
    + ),
    + contains=c("VIRTUAL")
    + )
    B <- setRefClass(
    + Class="B",
    + fields=list(
    + .PRIMARYDATA="character"
    + ),
    + contains=c("A")
    + )
    Error in `insertFields<-`(`*tmp*`, value = "character") :
    The overriding class("character") of field ".PRIMARYDATA" is not a
    subclass of the existing field definition ("ANY")

    We'll fix that. And, yes, "ANY" is intended as a universal superclass,
    but is usually not mentioned explicitly.

    On 6/3/11 6:53 AM, Janko Thyson wrote:
    Dear list,

    I was wondering if you could help me out in clarifying something:
    Is it possible to use class "ANY" in slots/fields of formal classes
    if you
    a) do not want to restrict valid classes of that field and
    b) if you are making explicit use of class inheritance?

    It seems to work in simple scenarios but produces errors when class
    inheritance comes into play. So I was wondering if that's a feature or a
    bug.

    If using "ANY" is not the right way, I'd appreciate a pointer to how you
    can to this.

    See previous post with an example below.

    Regards,
    Janko
    On 06/03/2011 01:53 AM, Janko Thyson wrote:
    On 31.05.2011 18:17, Martin Morgan wrote:
    On 05/30/2011 07:02 AM, Janko Thyson wrote:
    Dear list,

    I would like to set one specific Reference Class field to be of an
    arbitrary class. Is there a class that all R objects inherit from? I
    thought that "ANY" was something like this, but obviously that's not
    true:
    inherits(1:3, "ANY")
    [1] FALSE
    I can't speak to the implementation, but ANY functions as a base class
    in terms of slot / field assignment and inheritance, e.g.,

    setClass("A", representation(x="ANY"))
    new("A", x=1:3)

    Martin
    Hi Martin,

    sorry for the late response. The way you do it works. Yet, when you
    declare dependencies more explicitly (contains=XY), then R
    complains. Is
    this a feature or a bug (with respect to the "less explicit" way
    working
    just fine)? See the example below:

    # S4
    setClass("A", representation(x="ANY"))
    new("A", x=1:3)

    setClass("A", representation(x="ANY"))
    setClass("B", contains="A", representation(x="character"))
    new("B", x=1:3)

    # Reference Classes
    setRefClass(
    Class="A",
    fields=list(
    .PRIMARYDATA="ANY"
    ),
    contains=c("VIRTUAL")
    )
    B<- setRefClass(
    Class="B",
    fields=list(
    .PRIMARYDATA="character"
    ),
    contains=c("A")
    )
    Bug, I'd say. Martin
    Regards,
    Janko
    Regards,
    Janko

    [[alternative HTML version deleted]]

    ______________________________________________
    R-help at r-project.org mailing list
    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.
    ______________________________________________
    R-devel at r-project.org mailing list
    https://stat.ethz.ch/mailman/listinfo/r-devel

    --
    ------------------------------------------------------------------------

    *Janko Thyson*
    janko.thyson at ku-eichstaett.de <mailto:janko.thyson@ku-eichstaett.de>

    Catholic University of Eichst?tt-Ingolstadt
    Ingolstadt School of Management
    Statistics and Quantitative Methods
    Auf der Schanz 49
    D-85049 Ingolstadt

    www.wfi.edu/lsqm <http://www.wfi.edu/lsqm>

    Fon: +49 841 937-1923
    Fax: +49 841 937-1965

    This e-mail and any attachment is for authorized use by the intended
    recipient(s) only. It may contain proprietary material, confidential
    information and/or be subject to legal privilege. It should not be
    copied, disclosed to, retained or used by any other party.
    If you are not an intended recipient then please promptly delete this
    e-mail and any attachment and all copies and inform the sender.
  • Janko Thyson at Jun 6, 2011 at 4:35 pm
    Wow, that was fast! Thanks a lot!

    Regards,
    Janko
    On 06.06.2011 18:29, John Chambers wrote:
    Should now behave as expected in r-devel and 2.13 patched, as of SVN
    56045, June 4. (noted in the NEWS file.)

    On 6/6/11 6:27 AM, Janko Thyson wrote:
    Thanks a lot for your reply and I'm sorry if I didn't make it quite
    clear what I expected, but you got it right:

    I'd simply like to see the same behavior for Reference Classes as for S4
    classes when extending classes with "ANY" fields as featured in the
    example below.
    setClass("A", representation(x="ANY")) [1] "A"
    setClass("B", contains="A", representation(x="character")) [1] "B"
    new("B", x = "abc")
    An object of class "B"
    Slot "x":
    [1] "abc"

    Thanks for addressing this!

    Regards,
    Janko
    On 03.06.2011 19:13, John Chambers wrote:
    Well, your mail is unclear as to what you expected, but there is one
    bug shown by your example.

    The behavior of S4 classes is sensible, at least as far as the example
    shows:

    setClass("A", representation(x="ANY")) [1] "A"
    setClass("B", contains="A", representation(x="character")) [1] "B"
    new("B", x=1:3)
    Error in validObject(.Object) :
    invalid class "B" object: invalid object for slot "x" in class "B":
    got class "integer", should be or extend class "character"

    You couldn't expect the new() call to work, as the error message
    clearly explains. A legitimate call does work:
    new("B", x = "abc")
    An object of class "B"
    Slot "x":
    [1] "abc"

    The reference classes should work the same way, but don't, as your
    example shows.

    A <- setRefClass(
    + Class="A",
    + fields=list(
    + .PRIMARYDATA="ANY"
    + ),
    + contains=c("VIRTUAL")
    + )
    B <- setRefClass(
    + Class="B",
    + fields=list(
    + .PRIMARYDATA="character"
    + ),
    + contains=c("A")
    + )
    Error in `insertFields<-`(`*tmp*`, value = "character") :
    The overriding class("character") of field ".PRIMARYDATA" is not a
    subclass of the existing field definition ("ANY")

    We'll fix that. And, yes, "ANY" is intended as a universal superclass,
    but is usually not mentioned explicitly.

    On 6/3/11 6:53 AM, Janko Thyson wrote:
    Dear list,

    I was wondering if you could help me out in clarifying something:
    Is it possible to use class "ANY" in slots/fields of formal classes
    if you
    a) do not want to restrict valid classes of that field and
    b) if you are making explicit use of class inheritance?

    It seems to work in simple scenarios but produces errors when class
    inheritance comes into play. So I was wondering if that's a feature
    or a
    bug.

    If using "ANY" is not the right way, I'd appreciate a pointer to
    how you
    can to this.

    See previous post with an example below.

    Regards,
    Janko
    On 06/03/2011 01:53 AM, Janko Thyson wrote:
    On 31.05.2011 18:17, Martin Morgan wrote:
    On 05/30/2011 07:02 AM, Janko Thyson wrote:
    Dear list,

    I would like to set one specific Reference Class field to be of an
    arbitrary class. Is there a class that all R objects inherit
    from? I
    thought that "ANY" was something like this, but obviously that's
    not
    true:
    inherits(1:3, "ANY")
    [1] FALSE
    I can't speak to the implementation, but ANY functions as a base
    class
    in terms of slot / field assignment and inheritance, e.g.,

    setClass("A", representation(x="ANY"))
    new("A", x=1:3)

    Martin
    Hi Martin,

    sorry for the late response. The way you do it works. Yet, when you
    declare dependencies more explicitly (contains=XY), then R
    complains. Is
    this a feature or a bug (with respect to the "less explicit" way
    working
    just fine)? See the example below:

    # S4
    setClass("A", representation(x="ANY"))
    new("A", x=1:3)

    setClass("A", representation(x="ANY"))
    setClass("B", contains="A", representation(x="character"))
    new("B", x=1:3)

    # Reference Classes
    setRefClass(
    Class="A",
    fields=list(
    .PRIMARYDATA="ANY"
    ),
    contains=c("VIRTUAL")
    )
    B<- setRefClass(
    Class="B",
    fields=list(
    .PRIMARYDATA="character"
    ),
    contains=c("A")
    )
    Bug, I'd say. Martin
    Regards,
    Janko
    Regards,
    Janko

    [[alternative HTML version deleted]]

    ______________________________________________
    r-help@r-project.org mailing list
    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.
    ______________________________________________
    r-devel@r-project.org mailing list
    https://stat.ethz.ch/mailman/listinfo/r-devel

    --
    ------------------------------------------------------------------------

    *Janko Thyson*
    janko.thyson@ku-eichstaett.de >
    Catholic University of Eichstätt-Ingolstadt
    Ingolstadt School of Management
    Statistics and Quantitative Methods
    Auf der Schanz 49
    D-85049 Ingolstadt

    www.wfi.edu/lsqm <http://www.wfi.edu/lsqm>

    Fon: +49 841 937-1923
    Fax: +49 841 937-1965

    This e-mail and any attachment is for authorized use by the intended
    recipient(s) only. It may contain proprietary material, confidential
    information and/or be subject to legal privilege. It should not be
    copied, disclosed to, retained or used by any other party.
    If you are not an intended recipient then please promptly delete this
    e-mail and any attachment and all copies and inform the sender.

    --
    ------------------------------------------------------------------------

    *Janko Thyson*
    janko.thyson@googlemail.com

    Jesuitenstraße 3
    D-85049 Ingolstadt

    Mobile: +49 (0)176 83294257

    This e-mail and any attachment is for authorized use by the intended
    recipient(s) only. It may contain proprietary material, confidential
    information and/or be subject to legal privilege. It should not be
    copied, disclosed to, retained or used by any other party.
    If you are not an intended recipient then please promptly delete this
    e-mail and any attachment and all copies and inform the sender.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupr-devel @
categoriesr
postedJun 3, '11 at 1:53p
activeJun 6, '11 at 4:35p
posts5
users2
websiter-project.org
irc#r

2 users in discussion

Janko Thyson: 3 posts John Chambers: 2 posts

People

Translate

site design / logo © 2022 Grokbase