Tamas K Papp <[EMAIL PROTECTED]> writes:

> I have a huge matrix on which I need to do a simple (elementwise)
> transformation.  Two of these matrices cannot fit in the memory, so I cannot
> do this in R.
> 
> I thought of writing some C code to do this and calling it using .C with
> DUP=FALSE.  All I need is a simple for loop that replaces elements with
> their new value, something like
> 
> void transform(double *a, int *lengtha)  {
>   int i;
>   for (i=0; i < *lengtha; i++) {
>     *(a+i) = calculatenewvaluesomehow(*(a+i))
>   }
> }
> 
> trans <- function(a) .C("transform",as.double(a), as.integer(length(a))
> 
> is it possible to do this?  The manuals say that it is dangerous, is it
> possible to avoid the dangers somehow?

It's more a question of whether the dangers affect you. In general,
the issue is that you risk modifying a second (virtual) copy of the
data along with the one you intend to modify. If you're sure that you
don't have any, the point is moot. It is fairly difficult to be sure
of that in the general case, which is why we generally discourage
DUP=FALSE, especially for package writers, but for personal use you
might just get away with it.

-- 
   O__  ---- Peter Dalgaard             Ă˜ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - ([EMAIL PROTECTED])                  FAX: (+45) 35327907

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to