[R] Using .Call function to do matrix calculation
John Fox
jfox at mcmaster.ca
Mon Mar 17 21:59:05 CET 2003
Dear Deli Wang,
Perhaps this isn't what you're looking for, but it occurs to me that you
probably can do this problem without compiled code as sapply(1:nrow(a),
function(i) sum(a[i,] * b[,i])). This doesn't use much memory, and though
it may execute slowly, you may also get the answer before you debug your C
code.
I hope that this helps,
John
At 01:42 PM 3/17/2003 -0600, Deli Wang wrote:
>Hello,
>
>Because of high dimensionality of matrix, I can not use R matrix calculation
>operator to do matrix multiplication. My interest is the diagonal elements
>of J*J matrix( which can be got by multiplying matrix a(J*K) and b(K*J)),
>where J is too big to allocate enough memory for it. In order to get those
>diagonals, I tried .Call function to do that. Here is c program for .Call.
>
>#include <R.h>
>#include <Rinternals.h>
>
>SEXP var(SEXP a,SEXP b){
> int i,J=nrows(a),j,K=nrows(b),k;
>
> SEXP varbeta;
> PROTECT(varbeta=allocVector(REALSXP,J));
>
> for(j=0;j<J;j++){
> for(k=0;k<J;k++){
> if(j==k){
> for(i=0;i<K;i++) REAL(varbeta)[j]+=REAL(a)[j+i*J]*REAL(b)[i+k*K];}
> }
> }
>
> UNPROTECT(1);
>
> return (varbeta);
> }
>
>This function did not work at all. The warning messages is the segmentation
>fault.
>
>Could some expert help me out?
>
>Thanks.
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://www.stat.math.ethz.ch/mailman/listinfo/r-help
____________________________
John Fox
Department of Sociology
McMaster University
email: jfox at mcmaster.ca
web: http://www.socsci.mcmaster.ca/jfox
More information about the R-help
mailing list