[R] Retaining attributes of columns of a data frame when subsetting.
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Mon Oct 21 00:07:13 CEST 2019
Hello,
Sorry, you're right, in the method it's x, X is the test dataframe.
Repost:
`[.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
}
The (frequent) error comes from tests where a X was created in the
globalenv and found by the method.
Rui Barradas
Às 22:55 de 20/10/19, Rolf Turner escreveu:
>
> On 21/10/19 1:15 AM, Rui Barradas wrote:
>
>> Hello,
>>
>> Richard's idea is good but shouldn't it be `[.myclass` instead?
>
> Yes, I kind of thought that, and cobbled together something on that
> basis that seemed to work. However my code was rather a hodge-podge. I
> kept having to work around errors that I didn't understand.
>
> You seem to have a much clearer understanding of what's going on, and
> your code is much cleaner than what I came up with.
>
>>
>>
>> `[.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
>> }
>
> But in the foregoing there seems to me to be some inconsistency in the
> use of "X" and "x".
>
> Should not the first function argument be "X" rather than "x"? Or
> perhaps the "X" symbols in the code should be replaced by "x"? As in:
>
> SaveAt <- lapply(x, attributes)
> x <- NextMethod()
> ....
> ....
>
> Or am I misunderstanding what's going on (as is so often
> the case! :-( )?
>
>> X <- data.frame(a = letters[1:5], x = 1:5)
>> class(X) <- c("myclass", class(X))
>> attr(X$a, "attr_a1") <- "first_a"
>> attr(X$a, "attr_a2") <- "second_a"
>> str(X)
>>
>> ok <- c(1, 3, 4)
>> X <- X[ok, ]
>> str(X)
>>
>>
>> Hope this helps,
>
> Quite a lot! But I'd appreciate clarification w.r.t. the misgiving that
> I expressed above.
>
> Thanks.
>
> cheers,
>
> Rolf
>
More information about the R-help
mailing list