[Rd] Copying objects prior to .Call

From: Taylor Arnold <taylor.arnold_at_yale.edu>
Date: Wed, 11 Jan 2012 12:08:27 -0500


I have noticed that making a copy of an object in R prior to using .Call on the original object can
cause the C code to alter not only the object passed to it but also
the copy in R. A simple example

> x <- 2
> y <- x
> .Call("addOne", x, DUP=TRUE) # Changing DUP does not alter output
> x

[1] 3
> y

[1] 3

And corresponding simple C code:


#include <R.h>
#include <Rinternals.h>
#include <Rmath.h>

SEXP addOne(SEXP input) {
á REAL(input)[0] = REAL(input)[0] + 1;
á return R_NilValue;

I assume that this is simply a result of lazy loading in R, and well documented. My question is, do
there exist functions to (1) force R to make a copy of an object (force() does not work), and (2) to check whether two objects are actually pointing to the same memory address. For question 1, I have
found specific operations which force a copy of a given datatype, but would prefer a more general

Thank you,


> sessionInfo()

R version 2.14.1 (2011-12-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats graphics grDevices utils datasets methods base

loaded via a namespace (and not attached): [1] tools_2.14.1

Taylor B. Arnold
Department of Statistics
Yale University
24 Hillhouse Avenue
New Haven, CT 06520

e-mail: taylor.arnold_at_yale.edu

R-devel_at_r-project.org mailing list
Received on Wed 11 Jan 2012 - 17:33:08 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 11 Jan 2012 - 18:50:07 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive