Skip to content

Surprising results from INTEGER_GET_REGION with ALTREP object

2 messages · Ralf Stubner, Tomas Kalibera

#
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:
[1]  1  2  3  4  5  6  7  8  9 10

But not for "longer" vectors:
[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
[1] "R version 3.5.2 (2018-12-20)"

Thanks
Ralf
#
On 3/1/19 1:52 PM, Ralf Stubner wrote:
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