[Rd] documentation of .C (PR#9948)

schlather at math.uni-goettingen.de schlather at math.uni-goettingen.de
Wed Oct 10 16:35:18 CEST 2007


Full_Name: Martin Schlather
Version: R version 2.7.0 Under development (unstable) (2007-10-01 r43043)
OS: Linux
Submission from: (NULL) (91.3.209.203)


Hi,

There are 2 dangers with using 'DUP=FALSE' mentioned:
  * formal arguments
  * lists

Would you also mention a third one, namely
that values in R are now only referenced  whenever 
possible and not always copied; hence .C(..., DUP=FALSE) 
may change the values of other local variables.

E.g., with C code 
   void addone(double *x) {  *x = *x + 1; }

you get 
  
  x <- as.double(1)
  y <- x
  .C("addone", x, PACKAGE="test", DUP=FALSE)
  print(c(x,y))
#[1] 2 2

  
  x <- as.double(1)
  y <- as.double(x)
 .C("addone", x, PACKAGE="test", DUP=FALSE)
  print(c(x,y))
#[1] 2 2 

  x <- as.double(1)
  y <- as.integer(x)
 .C("addone", x, PACKAGE="test", DUP=FALSE)
  print(c(x,y))
#[1] 2 1

Many thanks and kind regards,
Martin



More information about the R-devel mailing list