From tom@@@k@||ber@ @end|ng |rom gm@||@com  Fri Mar  1 14:17:01 2019
From: tom@@@k@||ber@ @end|ng |rom gm@||@com (Tomas Kalibera)
Date: Fri, 1 Mar 2019 14:17:01 +0100
Subject: [Rd] 
 Surprising results from INTEGER_GET_REGION with ALTREP object
In-Reply-To: <e2a61102-ac26-8b55-47da-f66eb334d899@daqana.com>
References: <e2a61102-ac26-8b55-47da-f66eb334d899@daqana.com>
Message-ID: <4adce5a0-1bf2-5f6c-9190-49153ed322e5@gmail.com>

On 3/1/19 1:52 PM, Ralf Stubner wrote:
> Dear Listmembers,
>
> wanting to learn more about ALTREP I wrote the following function to
> extract a subsequence from an integer vector:
>
> #include <Rinternals.h>
>
> SEXP integer_get_region(SEXP _x, SEXP _i, SEXP _n) {
>    int i = INTEGER(_i)[0];
>    int n = INTEGER(_n)[0];
>    SEXP result = PROTECT(Rf_allocVector(INTSXP, n));
>    INTEGER_GET_REGION(_x, i, n, INTEGER(result));
>    UNPROTECT(1);
>    return result;
> }
>
> For "shorter" vectors, the result is as expected:
>
>> dyn.load("altrep_int_region.so")
>> .Call("integer_get_region", 1:1e9, 0L, 10L)
>   [1]  1  2  3  4  5  6  7  8  9 10
>
> But not for "longer" vectors:
>
>> .Call("integer_get_region", 1:1e10, 0L, 10L)
>   [1]          0 1072693248          0 1073741824          0 1074266112
>   [7]          0 1074790400          0 1075052544
>
>
> Am I doing something wrong or is this a bug? I am using

The problem is that 1:1e10 is a vector of doubles, not integers. See ?colon

"
For numeric arguments, a numeric vector.? This will be of type
?integer? if ?from? is integer-valued and the result is
representable in the R integer type, otherwise of type ?"double"?
(aka ?mode? ?"numeric"?).
"

Best
Tomas

>
>> R.version.string
> [1] "R version 3.5.2 (2018-12-20)"
>
> Thanks
> Ralf
>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



	[[alternative HTML version deleted]]



[Rd] Surprising results from INTEGER_GET_REGION with ALTREP object
Tomas Kalibera