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 <[email protected]> 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 <[email protected]> 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]] > > ______________________________________________ > [email protected] mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
