(This article was first published on

**Quantitative Ecology**, and kindly contributed to R-bloggers)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):

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 on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...