From ligges at statistik.uni-dortmund.de  Wed May 11 08:40:02 2005
From: ligges at statistik.uni-dortmund.de (Uwe Ligges)
Date: Wed May 11 08:39:20 2005
Subject: [Rd] bug, feature of mistery?
In-Reply-To: <20050510174535.GA21035@dss.ucsd.edu>
References: <20050510174535.GA21035@dss.ucsd.edu>
Message-ID: <4281A8C2.9090707@statistik.uni-dortmund.de>

Giuseppe Ragusa wrote:

> 
> I have two machines a linux_amd64_x86 (gentoo_amd64) and a linux_x86. Both run
> R-2.1.0. I have a very long program (hopefully will become a package)
> that works perfectly on the linux_amd_x64. Great means no error, no
> problems and results that, where the analytic solution exists,
> coincide with it. I have problem making the code run on the x64 machine. I
> am baffled. The same code on the same version of R, different arch,
> is behaving differently. 
> 
> After hour of debugging, I traced down what is triggering the error on
> the x86 machine.
> 
> the code snippet is the following similar to:
> 
> R>
> g <- h(d)
> 
> f <- function( lambda )
> {
> z <- g %*% lambda
> sum( psi(z) )
> ...
> }
> 
> optim( init.value, f )
> 
> R>
> 
> The function f() is using lexical scoping to get obtain g. The
> function psi() is a call to a wrapper function that call a (.C) C
> function doing some simple calculation on z. 

- Where is *lexical* scoping involved?

- Are you really calling you code from a clean workspace?

- Why don't use pass "g" through optim() to f? Please do so, because it 
might be a scoping problem.

- The .C call in psi() should not matter unless you are doing strange 
things in the part you omitted (...).

Uwe Ligges



> What's the problem? When f() is called, g is there, lambda is there,
> but the assignment  z <- g %*% lambda results in a matrix of NaN. This
> happens from the second time f() is called, i.e. the first time f() is
> called from optim() after the C call has been made. The error is then
> that passing a NaN vector to .C results in halted execution. 
> 
> If I debug f() during the call to optim, I can without problem assign
> z the correct value, but during the execution z is matrix(NaN, nr,
> 1). 
> 
> At this point I can think of the following:
> 
> 1) the external C code has errors 
> 
> It is not a programming error, because when called from console it
>    returns the right results. Also, remember, the program work on my
>    other machine (the 64 bit);
> 
> 2) R error (I do not think so)
> 
> 3) Compiling error
> Can be the gcc is messing thing around?
> 
> on the 32bit machine
> gcc version 3.3.5  (Gentoo Linux 3.3.5-r1, ssp-3.3.2-3, pie-8.7.7.1)
> 
> on the 64-bit machine
> gcc version 3.4.3 20041125 (Gentoo Linux 3.4.3-r1, ssp-3.4.3-0, pie-8.7.7)
> 
> Any help, suggestions, thoughts?
> 
> Thank you.
> 
> Giuseppe Ragusa
> 
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


[Rd] bug, feature of mistery?
Uwe Ligges