From r@turner @end|ng |rom @uck|@nd@@c@nz  Sun Nov  3 22:11:34 2019
From: r@turner @end|ng |rom @uck|@nd@@c@nz (Rolf Turner)
Date: Mon, 4 Nov 2019 10:11:34 +1300
Subject: [Rd] Puzzled about a new method for "[".
Message-ID: <74a6cf10-3266-fef8-9ea0-0ba6d36db807@auckland.ac.nz>


I recently tried to write a new method for "[", to be applied to data 
frames, so that the object returned would retain (all) attributes of the 
columns, including attributes that my code had created.

I thrashed around for quite a while, and then got some help from Rui 
Barradas who showed me how to do it, in the following manner:

`[.myclass` <- function(x, i, j, drop = if (missing(i)) TRUE else 
length(cols) == 1)[{
    SaveAt <- lapply(x, attributes)
    x <- NextMethod()
    lX <- lapply(names(x),function(nm, x, Sat){
      attributes(x[[nm]]) <- Sat[[nm]]
      x[[nm]]}, x = x, Sat = SaveAt)
    names(lX) <- names(x)
    x <- as.data.frame(lX)
    x
}

If I set class(X) <- c("myclass",class(X)) and apply "[" to X (e.g. 
something like X[1:42,]) the attributes are retained as desired.

OK.  All good.  Now we finally come to my question!  I want to put this 
new method into a package that I am building.  When I build the package 
and run R CMD check I get a complaint:

... no visible binding for global variable ?cols?

And indeed, there is no such variable.  At first I thought that maybe 
the code should be

`[.myclass` <- function(x, i, j, drop = if (missing(i)) TRUE else
                                       length(j) == 1)[{

But I looked at "[.data.frame" and it has "cols" too; not "j".

So why doesn't "[.data.frame" throw a warning when R gets built?

Can someone please explain to me what's going on here?

cheers,

Rolf

P. S. I amended the code for my method, replacing "cols" by "j", and it 
*seems* to run, and deliver the desired results.  (And the package 
checks, without complaint.) I am nervous, however, that there may be 
some Trap for Young Players that I don't perceive, lurking about and 
waiting to cause problems for me.

R.

-- 
Honorary Research Fellow
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276



[Rd] Puzzled about a new method for "[".
Rolf Turner