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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to