On 02/03/2015 8:46 AM, sarah manderni wrote:
Thanks! I went through the online posts which supports the power of
.Call over .C. But my probably naive question is why does this work
for my code with R but not R-devel?
Because of the change mentioned in the NEWS file.
And another question is related to using .Call. Based on the manual
page, I do not need to change the function parameters when using
.Call. So I can run like this:
.Call("sppedUp", D, S, pD, pS, nrow(D), as.integer(N), length(N),
ssq[i], i, as.integer(B), overlaps, overlaps.P)
But I am receiving the memory(?) related error:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Now that I am running the code using .Call.
Code using .Call is quite different from code using .C. My guess would
be that you didn't get all the details right.
I generally recommend that people use Rcpp, which hides a lot of the
details. It will generate your .Call calls for you, and generate the
C++ code that receives them; you just need to think about the real
problem, not the interface. It has its own learning curve, but I think
it is easier than using the low-level code that you need to work with .Call.
Duncan Murdoch
Thanks.
On Mon, Mar 2, 2015 at 2:01 PM, Duncan Murdoch
<murdoch.dun...@gmail.com <mailto:murdoch.dun...@gmail.com>> wrote:
On 02/03/2015 3:50 AM, sarah manderni wrote:
> Hi,
>
> Within my R code, I am using a C++ function as below:
>
> overlaps <- matrix(0, nrow=B, ncol=length(N))
> overlaps.P <- matrix(0, nrow=B, ncol=length(N))
>
> .C("speedUp", D, S, pD, pS, nrow(D), as.integer(N),
length(N),
> ssq[i], i, as.integer(B), overlaps, overlaps.P,
DUP=FALSE)
>
>
> the function "speedUp", is supposed to update matrices overlaps and
> overlaps.P and it works with official R versions.
> However, using the same code in R-devel, it does not update
matrices and
> they remain all zero without returning any errors.
See the NEWS: DUP=FALSE is now ignored. It led to too many
bugs. Use
the .Call interface if duplication causes problems.
Duncan Murdoch
> But, if I store the return values from C function in a variable
lets say
> "test" as follows:
>
> test <- .C("speedUp", D, S, pD, pS, nrow(D), as.integer(N),
> length(N),
> ssq[i], i, as.integer(B), overlaps, overlaps.P,
DUP=FALSE)
>
> then the corresponding element of test to matrix "overlaps"
> (test[["overlaps"]]) again has the updated values (correct
non-zero values)
> though the overlaps matrix itself is still empty.
>
> I mean in official R, the "overlaps" matrix is updated after
calling the
> function but not in R-devel. Also it works in both environment
and return
> correct values to variable "test" in R-devel as well.
> Did you face any similar problem so that R-devel does not update the
> variable returned by C++?
>
> Thanks for the help.
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel@r-project.org <mailto:R-devel@r-project.org> mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel