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@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]]

