Inconsistent results from .C()
It might also help if you can point us to the C code to help debug. MW
On Tue, May 21, 2013 at 10:53 AM, Robin Evans <rje42 at cam.ac.uk> wrote:
I should add to this that I'm running on Scientific Linux 6. I later noticed that the bug only seems to occur when I run the code from Rstudio, and not if I use the terminal directly, so this may be the key to the problem. Robin On 20 May 2013 16:12, Robin Evans <rje42 at cam.ac.uk> wrote:
Hello,
I've run into a problem which is both maddening and rather hard to
replicate, therefore I wondered if someone might know of a plausible
explanation for it. I couldn't find anything in the archives, though
maybe I'm searching for the wrong thing.
I'm calling some C code using .C, and get the vector I'm interested in
back as the 7th location in the returned list. However I find that if
I try to inspect the contents of this entry in the list in some ways,
I get one answer, and if I look at it in others I get a different
answer. It's quite possible that there's something wrong with the C
code, but this doesn't seem to explain why this phenomenon would occur
in R.
The problem does not always occur - I have to run the code a few times
and then call the console when it does, but the commands below show
what can happen when it does. I apologise for not being able to get a
cleaner example. Full code and output is below, but here is a
stylised version:
The following all give one answer (which is the wrong answer as far as
I'm concerned) :
* printing the whole list :
.C(...) # and looking at the 7th entry
* applying c() to the 7th element of the list
c(.C(...)[[7]])
* assigning the 7th element to a vector:
x = .C(...)[[7]];
x
these give a different answer (which is the answer I would hope the C
code returns):
* using dput on the 7th entry:
dput(.C(...)[[7]])
* applying c() and then dput()
dput(c(.C(...)[[7]]))
* just printing the 7th entry of the list
.C(...)[[7]]
The answers are consistent in the sense that I always get the same
answers from running the same command in the console. I have tried
inspecting the returned objects to see if the objects are somehow of a
different class than I expect, or are just being printed oddly, but
have not found anything untoward.
Any suggestions would be much appreciated!
Regards,
Robin
# THESE COMMANDS GIVE ONE ANSWER
# [the correct answer always begins with 1, the incorrect with -1]
.C("oneMargin", c(1L,1L,1L,1L,1L), c(1L,1L,1L,1L,1L), 1L,
c(2L,2L,2L,2L,2L), 5L, ptr1, ptr2)[[7]] [1] 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1
dput(.C("oneMargin", c(1L,1L,1L,1L,1L), c(1L,1L,1L,1L,1L), 1L,
c(2L,2L,2L,2L,2L), 5L, ptr1, ptr2)[[7]]) c(1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L, -1L, 1L, 1L, -1L, 1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L, 1L, -1L, -1L, 1L, 1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L)
x=dput(c(.C("oneMargin", c(1L,1L,1L,1L,1L), c(1L,1L,1L,1L,1L), 1L,
c(2L,2L,2L,2L,2L), 5L, ptr1, ptr2)[[7]])) c(1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L, -1L, 1L, 1L, -1L, 1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L, 1L, -1L, -1L, 1L, 1L, -1L, -1L, 1L, -1L, 1L, 1L, -1L)
x
[1] 1 -1 -1 1 -1 1 1 -1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 # THESE ALL GIVE A DIFFERENT ONE!
.C("oneMargin", c(1L,1L,1L,1L,1L), c(1L,1L,1L,1L,1L), 1L,
c(2L,2L,2L,2L,2L), 5L, ptr1, ptr2) # (OTHER ELEMENTS OF LIST REMOVED) [[7]] [1] -1 -1 1 1 1 1 -1 -1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 -1 -1 1 1 1 1 -1 -1
c(.C("oneMargin", c(1L,1L,1L,1L,1L), c(1L,1L,1L,1L,1L), 1L,
c(2L,2L,2L,2L,2L), 5L, ptr1, ptr2)[[7]]) [1] -1 -1 1 1 1 1 -1 -1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 -1 -1 1 1 1 1 -1 -1
x = .C("oneMargin", c(1L,1L,1L,1L,1L), c(1L,1L,1L,1L,1L), 1L,
c(2L,2L,2L,2L,2L), 5L, ptr1, ptr2)[[7]]
x
[1] -1 -1 1 1 1 1 -1 -1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 -1 -1 1 1 1 1 -1 -1 -- Robin Evans Statistical Laboratory University of Cambridge blog: itsastatlife.blogspot.com web: www.statslab.cam.ac.uk/~rje42 Causal Inference Workshop July 15th: http://www.statslab.cam.ac.uk/~rje42/uai13/main.htm
-- Robin Evans Statistical Laboratory University of Cambridge blog: itsastatlife.blogspot.com web: www.statslab.cam.ac.uk/~rje42 <http://www.stat.washington.edu/~rje42> Causal Inference Workshop July 15th: http://www.statslab.cam.ac.uk/~rje42/uai13/main.htm [[alternative HTML version deleted]]
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel