[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