[Rd] allocVector reference
Matthew Dowle
Matthew at CONCORDIAFUNDS.com
Wed Mar 14 18:44:04 CET 2007
Hi,
I'm trying to write a function to return an R vector which points
directly to a contiguous subset of another vector, without taking a
copy. Since SEXPREC is a header followed by the data, rather than the
header plus a pointer to the data, I'm not sure what I'm trying to do is
possible. Is there a way of doing this? Similar in spirit to how the R
assignment "x=y" does not copy y until x is modified, but for a
contiguous subset of y e.g. "x=y[5:9]" would become "x=vecref(y,5,5)".
SEXP vecref(SEXP v, SEXP offset, SEXP len)
{
// assuming v is an integer vector, offset>=0, len>=0 and
(offset+len)<length(v)
SEXP ans;
PROTECT(ans = allocVector(INTSXP, 0));
DATAPTR(ans) = INTEGER(v) + INTEGER(offset)[0]; // this
line doesn't work since DATAPTR is really an offset by the header
LENGTH(ans) = INTEGER(len)[0];
UNPROTECT(1);
return(ans);
}
Thanks in advance,
Matthew
More information about the R-devel
mailing list