From statmobile at gmail.com  Fri Jun 15 17:21:06 2007
From: statmobile at gmail.com (statmobile at gmail.com)
Date: Fri, 15 Jun 2007 11:21:06 -0400
Subject: [Rd] LAPACK Headers
In-Reply-To: <Pine.LNX.4.64.0706150639100.28253@gannet.stats.ox.ac.uk>
References: <20070614214558.GA20567@bjl> <4671C0E0.7010200@cimr.cam.ac.uk>
	<20070615025342.GA21406@bjl>
	<Pine.LNX.4.64.0706150639100.28253@gannet.stats.ox.ac.uk>
Message-ID: <20070615152106.GA23630@bjl>

Prof. Ripley,

I had a feeling I was going a little too deep into the R source code
in order to pull out these functions.  I particularly like these La_*
functions calling the LAPACK routines, because they have so much of
the error checking already built-in.  I can just copy the code over,
and hopefully it will pick up everything in my package, but I do have
two questions.

1.  I seem to vaguely recall that the R-ext documentation mentions
    that routines such as this could possibly change.  So if someone
    wants to use any of the LAPACK or BLAS routines in their source
    code, they should really only refer to the programs in
    R_ext/Lapack.h? 

2.  I think the LAPACK utilities are key in R, and help new
    researchers avoid having to use proprietary code such as Numerical
    Recipes when doing their research.  Is there a reason why code
    such as the La_* wrapper functions are not ``public''?  I really
    think they're quite useful.

Thanks,
Brian


On Fri, Jun 15, 2007 at 06:45:09AM +0100, Prof Brian Ripley wrote:
> He wants "La_dgesv", which is not an LAPACK entry point at all, but a 
> private part of R.  The header it is in is private and not installed.
> 
> There is no guarantee that it will remain visible to an R package, and the 
> only safe thing to do is to copy the code.
> 
> On Thu, 14 Jun 2007, statmobile at gmail.com wrote:
> 
> >On Thu, Jun 14, 2007 at 11:27:44PM +0100, Hin-Tak Leung wrote:
> >>Try this? (this is on 2.5.0, I don't use 2.4.x anymore)
> >>
> >>#include <R_ext/Lapack.h>
> >>
> >
> >I tried this, but I still get the warning of implicit declaration of
> >function.  It does compile though.
> >
> >>Have you actually tried grep dgesv $R_HOME/include/* $R_HOME/include/*/*
> >>to see which file to include for dgesv ??
> >
> >Well, when I grep the R source files, I get:
> >
> >$ find . -name "*" -print | xargs grep -i 'La_dgesv'
> >./src/main/basedecl.h:SEXP La_dgesv(SEXP, SEXP, SEXP);
> >./src/main/lapack.c:SEXP La_dgesv(SEXP A, SEXP B, SEXP tol)
> >./src/main/lapack.c:SEXP La_dgesv(SEXP A, SEXP B, SEXP tol)
> >./src/main/registration.c:    CALLDEF(La_dgesv, 3),
> >./src/library/base/R/solve.R:     .Call("La_dgesv", a, b, tol, PACKAGE
> >= "base")
> >./src/library/base/R/solve.R:     drop(.Call("La_dgesv", a,
> >as.matrix(b), tol, PACKAGE = "base")))
> >./src/modules/lapack/Lapack.c:static SEXP modLa_dgesv(SEXP A, SEXP
> >Bin, SEXP tolin)
> >./src/modules/lapack/Lapack.c:    tmp->dgesv = modLa_dgesv;
> >./src/include/Rmodules/Rlapack.h:typedef SEXP (*Rf_La_dgesv)(SEXP A,
> >SEXP B, SEXP tol);
> >./src/include/Rmodules/Rlapack.h:    Rf_La_dgesv dgesv;
> >
> >So it looks like La_dgesv is declared in basedecl.h, but I don't see
> >this file anywhere else on my machine.  Maybe I shouldn't be using
> >this function in my package?
> >
> >
> >
> >>
> >>HTL
> >>
> >>statmobile at gmail.com wrote:
> >>>Hey Everyone,
> >>>
> >>>I'm running R 2.4.0 on Debian etch 4.0, and I'm trying to call some
> >>>LAPACK functions from the C code in my package.  Actually, to be
> >>>honest I'm not really having trouble using commands such as La_dgesv
> >>>from within my C code, but I do get warning when compiling the package
> >>>saying:
> >>>
> >>>***.c: In function '***':
> >>>***.c:37: warning: implicit declaration of function 'La_dgesv'
> >>>***.c:37: warning: assignment makes pointer from integer without
> >>>a cast
> >>>
> >>>I tried using:
> >>>
> >>>#include <Rmodules/Rlapack.h>
> >>>
> >>>but it won't compile the package at all with that included,
> >>>complaining that
> >>>
> >>>***.h:5:30: error: Rmodules/Rlapack.h: No such file or directory
> >>>
> >>>Can someone explain to me how I should include the headers to this
> >>>AWESOME wrapper code to the LAPACK libraries?  Am I not following the
> >>>proper protocol by using these La_* commands in my package source
> >>>code?
> >>>
> >>>Note, I also have the following in Makevars
> >>>
> >>>PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
> >>>
> >>>TIA!
> >>>
> >>>I initially posted this question on the general list, but I didn't get
> >>>any responses.
> >>>
> >>>______________________________________________
> >>>R-devel at r-project.org mailing list
> >>>https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >
> >
> 
> -- 
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-- 
Brian J. Lopes
PhD Student
Department of Statistics and Operations Research
University of North Carolina at Chapel Hill

To know that we know what we know, and that we do not know what we do
not know, that is true knowledge --Henry David Thoreau (quoting
Confucius): Walden



[Rd] LAPACK Headers
statmobile at gmail.com