[Rcpp-devel] function created from cxxfunction modifies input?
Joshua Wiley
jwiley.psych at gmail.com
Sun Jul 8 01:20:22 CEST 2012
Hi,
I am familiar with R but quite new to C++. I am reading a C++
textbook, so if this is an obvious question just resulting in my
ignorance of C++, please let me know.
I tried to translate someone else's R loop that was slow into c++ to
use with Rcpp and the inline package:
require(Rcpp)
require(inline)
## Rcpp function body
src <- '
NumericVector xx(x);
int n = xx.size();
NumericVector res(xx);
int toggle = 0;
int tot = 100;
int max = 100;
typedef NumericVector::iterator vec_iterator;
vec_iterator ixx = xx.begin();
vec_iterator ires = res.begin();
for (int i = 0; i < n; i++) {
if (ixx[i] != 0) {
if (toggle == 1) {
ires[i] = 0;
}
if (toggle != 1) {
tot += ixx[i];
if (tot > max) {
max = tot;
}
if (tot <= max) {
if (.98 * max > tot) {
toggle = 1;
}
}
}
}
if (ixx[i] == 0) {
tot = 100;
max = 100;
toggle = 0;
}
}
return res;
'
## compile the function
foo.rcpp <- cxxfunction(signature(x = "numeric"), src, plugin = "Rcpp")
## here is a little input vector, the function should
## output the same but with a 0 instead of 8
> d
[1] 0 0 0 1 3 4 5 -1 2 3 -5 8
> foo.rcpp(d) # great it works!
[1] 0 0 0 1 3 4 5 -1 2 3 -5 0
> d # but now d itself has changed?
[1] 0 0 0 1 3 4 5 -1 2 3 -5 0
It seems particularly surprising to me, because I do not think I even
modify the input vector, I copy it into the numeric vector res and
alter that.
Thanks,
Josh
--
Joshua Wiley
Ph.D. Student, Health Psychology
Programmer Analyst II, Statistical Consulting Group
University of California, Los Angeles
https://joshuawiley.com/
More information about the Rcpp-devel
mailing list