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.