On Sun, Mar 04, 2012 at 03:18:33PM -0600, Matyas Sustik wrote: > Hi All, > > I am confused by a type conversion happening against my intent. > > In an R script I allocate a matrix X, and I pass it to a C function > by using > > tmp -< .C(..., as.double(X),...). > > I use as.double() because I read that it makes sure that the > parameter passing is correct. > > I return the matrix from the R script using: > > return (list(..., X = tmp$X, ...)) > > The returned value is not a matrix but a flat vector. > > I must not understand something fundamental that is happening > here.
Hi. No, this is correct. See section 5.2 Interface functions .C and .Fortran in R-exts.pdf for the list of C types. There is int * and double *, which are vectors. Your R code should restore the dim attribute after the return from C code, for example using matrix() with appropriate nrow and ncol parameters. If you want to pass really a matrix, use .Call, which is more powerful. Hope this helps. Petr Savicky. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.