R matrices in C functions
[This article was first published on Quantitative Ecology, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Using the .C() function in R, you can only pass vectors. Since R stores matrices columnwise as vectors anyhow, they can be passed to your C function as vectors (along with the number of rows in the matrix) and then accessed in familiar [row,col] manner using the following C functions (idea from here):Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
int Cmatrix(int *row, int *col, int *nrows){ /* Converts row-col notation into base-zero vector notation, based on a column-wise conversion*/ int vector_loc; vector_loc=(*row)-1 + ((*col)-1)*(*nrows); return(vector_loc); } void Rmatrix(int *vector_loc,int *row, int *col, int *nrows){ /*Converts vector notation into row-col notation*/ /*vector_loc is the vector address of the matrix (base zero)*/ /*row and col are pointers to the row and col variables that will be updated */ *col=floor(*vector_loc / *nrows)+1; *row=*vector_loc-((*col)-1)*(*nrows)+1; }
To leave a comment for the author, please follow the link and comment on their blog: Quantitative Ecology.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.