[Rd] Surprising results from INTEGER_GET_REGION with ALTREP object
Tomas Kalibera
tom@@@k@||ber@ @end|ng |rom gm@||@com
Fri Mar 1 14:17:01 CET 2019
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 using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
[[alternative HTML version deleted]]
More information about the R-devel
mailing list