Dear List members, Is there a way to access the default names() function? I tried the following: # Multi-variable polynomial p = data.frame(x=1:3, coeff=1) class(p) = c("pm", class(p)); names.pm = function(p) { # .Primitive("names")(p) # does NOT function # .Internal("names")(p) # does NOT function # nms = names.default(p) # does NOT exist # nms = names.data.frame(p) # does NOT exist # nms = names(p); # obvious infinite recursion; nms = names(unclass(p)); } Alternatively: Would it be better to use dimnames.pm instead of names.pm? I am not fully aware of the advantages and disadvantages of dimnames vs names. Sincerely, Leonard
First, your signature for names.pm is wrong. It should look something more like: names.pm <- function (x) { } As for the body of the function, you might do something like: names.pm <- function (x) { NextMethod() } but you don't need to define a names method if you're just going to call the next method. I would suggest not defining a names method at all. As a side note, I would suggest making your class through the methods package, with methods::setClass("pm", ...) See the documentation for setClass for more details, it's the recommended way to define classes in R. On Wed, Nov 3, 2021 at 2:36 PM Leonard Mada via R-help <r-help at r-project.org> wrote:> Dear List members, > > > Is there a way to access the default names() function? > > > I tried the following: > > # Multi-variable polynomial > > p = data.frame(x=1:3, coeff=1) > > class(p) = c("pm", class(p)); > > > names.pm = function(p) { > # .Primitive("names")(p) # does NOT function > # .Internal("names")(p) # does NOT function > # nms = names.default(p) # does NOT exist > # nms = names.data.frame(p) # does NOT exist > # nms = names(p); # obvious infinite recursion; > nms = names(unclass(p)); > } > > > Alternatively: > > Would it be better to use dimnames.pm instead of names.pm? > > I am not fully aware of the advantages and disadvantages of dimnames vs > names. > > > Sincerely, > > > Leonard > > ______________________________________________ > R-help at r-project.org 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. >[[alternative HTML version deleted]]
On Wed, 3 Nov 2021 20:35:58 +0200 Leonard Mada via R-help <r-help at r-project.org> wrote:> class(p) = c("pm", class(p));Does NextMethod() work for you? -- Best regards, Ivan
Hello, I too would expected NextMethod to work but the following seems to be simpler. "names" is an attribute, so should be accessible with attr. names.pm = function(p) { attr(p, "names") } p = data.frame(x=1:3, coeff=1) class(p) = c("pm", class(p)); names(p) #[1] "x" "coeff" Hope this helps, Rui Barradas ?s 18:35 de 03/11/21, Leonard Mada via R-help escreveu:> Dear List members, > > > Is there a way to access the default names() function? > > > I tried the following: > > # Multi-variable polynomial > > p = data.frame(x=1:3, coeff=1) > > class(p) = c("pm", class(p)); > > > names.pm = function(p) { > # .Primitive("names")(p) # does NOT function > # .Internal("names")(p) # does NOT function > # nms = names.default(p) # does NOT exist > # nms = names.data.frame(p) # does NOT exist > # nms = names(p); # obvious infinite recursion; > nms = names(unclass(p)); > } > > > Alternatively: > > Would it be better to use dimnames.pm instead of names.pm? > > I am not fully aware of the advantages and disadvantages of dimnames vs > names. > > > Sincerely, > > > Leonard > > ______________________________________________ > R-help at r-project.org 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.