[Rd] [External] Two ALTREP questions

iuke-tier@ey m@iii@g oii uiow@@edu iuke-tier@ey m@iii@g oii uiow@@edu
Sat Nov 21 23:57:03 CET 2020

On Sat, 21 Nov 2020, Jiefei Wang wrote:

> Hello,
> I have two related ALTREP questions. It seems like there is no way to
> assign attributes to an ALTREP vector without using C++ code. To be more
> specifically, I want to make an ALTREP matrix, I have tried the following R
> code but none of them work.
> ```
> .Internal(inspect(1:6))
> .Internal(inspect(matrix(1:6, 2,3)))
> .Internal(inspect(as.matrix(1:6)))
> .Internal(inspect(structure(1:6, dim = c(2L,3L))))
> .Internal(inspect({x <- 1:6;attr(x, "dim") <- c(2L,3L);x}))
> .Internal(inspect({x <- 1:6;attributes(x)<- list(dim = c(2L,3L));x}))
> ```

Some things that my help you:

- Try with 1:6 replaced by as.character(1:6), and look at the REF
   values in both cases.

- In particular, look at what this gives you:

     x <- as.character(1:6)
     attr(x, "dim") <- c(2, 3)

- Things can be a little different with larger vectors; try variants
   of your examples for more than 64 elements.

> This also brings
> my second question, it seems like the ALTREP coercion function does not
> handle attributes correctly.  After the coercion, the ALTREP object will
> lose its attributes.
> ```
> coerceFunc <- inline::cxxfunction( signature(x = "SEXP", attr = "SEXP" ) , '
> SET_ATTRIB(x,attr);
> return(Rf_coerceVector(x, REALSXP));
> ')
>> coerceFunc(1:6, pairlist(dim = c(2L, 3L)))
> [1] 1 2 3 4 5 6
>> coerceFunc(1:6 + 0L, pairlist(dim = c(2L, 3L)))
>     [,1] [,2] [,3]
> [1,]    1    3    5
> [2,]    2    4    6
> ```
> The problem is that the coercion function is directly dispatched to the
> user-defined ALTREP coercion function, so the user is responsible to attach
> the attributes after the coercion. If he forgets to do so, then the result
> is a plain vector. Similar to the `Duplicate` and `DuplicateEX` functions
> where the former one will attach the attributes by default, I feel that the
> `Coerce` function should only return a plain vector and there should be a
> `CoerceEx` function to do the attribute assignment, so the logic in the
> no-EX ALTREP functions can be consistent. I do not know how dramastic the
> change would be, so maybe this is too hard to do.

Since you raised this earlier I have been looking at it and also think
that this needs to he handled along the lines of
Duplicate/DuplicateEx. I need to find some time to think that through
and implement it; hopefully I'll get to it before the end of the year.

> BTW, is there any way to contribute to the R source? I know R has a limited
> resouces, so if possible, I will be happy to fix the matrix issue myself
> and make some minor contributions to the R community.

You can find the suggested process for contributing described in the
'Reporting Bugs' link on the R home page https://www.r-project.org/



> Best,
> Jiefei
> 	[[alternative HTML version deleted]]
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:   luke-tierney using uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu

More information about the R-devel mailing list