Re: [Rd] Use of R in C#

2011-05-23 Thread Erich Neuwirth
Please discuss statconnDCOM related problems on its dedicated mailing
list. You can subscribe at rcom.univie.ac.at


On 5/22/2011 2:31 PM, Andra wrote:
> 
> Jeff Abrams  microsoft.com> writes:
> 
>>
>> I have a C# program that requires the run of a logistic regression.  I have 
> downloaded the R 2.11 package, and
>> have added the following references to my code:

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] Calling Rscript from Makevars

2011-05-23 Thread Martyn Byng
Hi,

Thanks for the help. 

Putting the call to Rscript directly in the definition of PKG_LIBS
rather than in a different makefile variable and using that variable
when defining PKG_LIBS did indeed fix my problem.

Martyn
-Original Message-
From: Simon Urbanek [mailto:simon.urba...@r-project.org] 
Sent: 20 May 2011 20:17
To: Martyn Byng
Cc: r-devel@r-project.org
Subject: Re: [Rd] Calling Rscript from Makevars


On May 20, 2011, at 12:04 PM, Martyn Byng wrote:

> Hi,
> 
> I am trying to package some code to use with R and wanted to call
> Rscript from within the Makevars file (I am trying to automate the
> setting of the location of a third party library depending on what is
> available / the system the package is being installed on).
> 
> If I just have a simple Makevars containing
> 
> 
> PKG_LIBS= -lnag_nag -L/fserver/nagprod/FL22/fll6a22df/lib
> 
> 
> the package is built without any errors, if I attempt to add a call to
> Rscript, for example (which I think is the way that "Writing R
> Extensions" recommends):
> 
> 
> R_SCRIPT_NAME=Rscript
> ifneq ($(R_HOME),)
>  R_SCRIPT=$(R_HOME)/bin$(R_ARCH_BIN)/$(R_SCRIPT_NAME)
> else
>  R_SCRIPT=$(R_SCRIPT_NAME)
> endif
> R_ARCH=$(shell $(R_SCRIPT) -e 'cat(R.version$$arch)')
> 

That's all pretty much unnecessary since all settings carry over from
the R invocation and also it is what causes your error (since your
"arch" is wrong). On unix it's as simple as

PKG_LIBS=`${R_HOME}/bin/Rscript -e 'whatever.you.meant.to.run()'`

and on Windows it's

PKG_LIBS=`${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe -e
'whatever.you.meant.to.run()'`

Note that you should NOT mess with the environment variables that R uses
as you're likely to set them incorrectly.

Cheers,
Simon



> PKG_LIBS= -lnag_nag -L/fserver/nagprod/FL22/fll6a22df/lib
> 
> 
> I get the following error:
> 
> * checking for file 'NAGFWrappers/DESCRIPTION' ... OK
> * preparing 'NAGFWrappers':
> * checking DESCRIPTION meta-information ... OK
> * cleaning src
> make: Nothing to be done for `clean'.
> * removing junk files
> * checking for LF line-endings in source and make files
> * checking for empty or unneeded directories
> * building binary distribution
> * installing *source* package 'NAGFWrappers' ...
> ** libs
> /usr/share/R/make/shlib.mk:3: /usr/lib64/R/etcx86_64/Makeconf: No such
> file or directory
> make: *** No rule to make target `/usr/lib64/R/etcx86_64/Makeconf'.
> Stop.
> ERROR: compilation failed for package 'NAGFWrappers'
> * removing '/tmp/Rinst1513764321/NAGFWrappers'
> ERROR
> * installation failed
> 
> 
> Any help / pointers would be appreciated.
> 
> Cheers
> 
> Martyn
> 
> Output from R.version:
> 
> platform   x86_64-redhat-linux-gnu  
> arch   x86_64   
> os linux-gnu
> system x86_64, linux-gnu
> status  
> major  2
> minor  11.0 
> year   2010 
> month  04   
> day22   
> svn rev51801
> language   R
> version.string R version 2.11.0 (2010-04-22)
> 
> 
>

> The Numerical Algorithms Group Ltd is a company registered in England
> and Wales with company number 1249803. The registered office is:
> Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
> 
> This e-mail has been scanned for all viruses by Star.
Th...{{dropped:4}}
> 
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 



This e-mail has been scanned for all viruses by Star.\ _...{{dropped:12}}

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] Calling Rscript from Makevars

2011-05-23 Thread Sean Robert McGuffee
Hi Simon,

I'm not sure what you mean by, "any tests you run in configure will ignore
it since autoconf only uses LIBS and not PKG_LIBS." I though autoconf used
any variable names you tell it to, so that it would use PKG_LIBS if you tell
it to. 

Also, I'm still not clear as to what a Makevars file is. To clarify, I do
understand a Makefile. When GNU's make program is run, it looks for a
Makefile and interprets it in ways that are documented very well by GNU. I
have yet to find any lead as to what a Makevars file is, what to put in it,
what it does, or how it helps in installation with R packages. I can
understand how to define variables in it, but the only way I know how to use
variables that are defined is by using them in a Makefile. Where and how are
variables defined in Makevars used?

Sean

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] Calling Rscript from Makevars

2011-05-23 Thread Simon Urbanek

On May 23, 2011, at 12:56 PM, Sean Robert McGuffee wrote:

> I'm not sure what you mean by, "any tests you run in configure will ignore it 
> since autoconf only uses LIBS and not PKG_LIBS." I though autoconf used any 
> variable names you tell it to, so that it would use PKG_LIBS if you tell it 
> to. 
> 

No, many variables have a special meanings in autoconf, such as CC, CPP, 
CFLAGS, LIBS, LDFLAGS etc. When you run tests like AC_PROG*, AC_HEADER*, 
AC_CHECK_*, AC_COMPILE*, AC_LINK* then those use (and set) only the variables 
supported by configure and they have no idea about things like PKG_LIBS. So as 
far as autoconf is concerned PKG_LIBS has no effect.

Because R has its own building process, using autoconf with packages means you 
have to a) set autoconf's flags to match the R configuration before you do 
anything, b) use autoconf tests which implies using autoconf's flags, c) map 
resulting autoconf flags to special R package flags. If you skip any of a,b,c 
the result will not be reliable. In theory, you can handle R's flags and 
autoconf flags in parallel, i.e., updating both in the success branch of each 
test, but that's a bit too tedious to implement (you can't use the autoconf 
default actions) and unnecessary.


> Also, I'm still not clear as to what a Makevars file is. To clarify, I do 
> understand a Makefile. When GNU's make program is run, it looks for a 
> Makefile and interprets it in ways that are documented very well by GNU. I 
> have yet to find any lead as to what a Makevars file is, what to put in it, 
> what it does, or how it helps in installation with R packages. I can 
> understand how to define variables in it, but the only way I know how to use 
> variables that are defined is by using them in a Makefile. Where and how are 
> variables defined in Makevars used?
> 

Makevars is simply a file included in R's Makefile when it is building the 
package. So, technically, it is a makefile. The difference between Makevars and 
Makefile is that Makevars doesn't need to specify any rules or variables that R 
already knows about, because they are already included by R. So it is much more 
convenient since it saves you a lot of trouble trying to setup the correct 
rules for compilation, linking etc. At the same time, it is a makefile so you 
can add targets, modify dependencies etc., you're not constrained to just 
setting variables although that is its primary use.

In practice Makevars can be used in several ways:

a) just set PKG_CFLAGS, PKG_LIBS
this is the most common use and it leaves the standard targets in place so R 
will use those to compile $(SHLIB) automatically

b) include additional targets:
if you have additional features to build, you can specify them in a target, for 
example this is form rJava:

all: $(SHLIB) @WANT_JRI_TRUE@ jri
jri: ... 

It builds the standard $(SHLIB) which is loaded by the package, but it also 
builds a separate target "jri" if enabled in configure

c) include dependencies:
you can add dependent builds that are needed for your $(SHLIB), for example 
from RSQLite:

all: $(SHLIB)
$(SHLIB): do_includes
do_includes:

This makes sure that do_includes is built before R attempts to build the 
.so/.dll


So, as you can see you Makevars gives you the flexibility of Makefile but 
without the hassle.

Cheers,
Simon

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] Calling Rscript from Makevars

2011-05-23 Thread Sean Robert McGuffee



On 5/23/11 1:30 PM, "Simon Urbanek"  wrote:

> 
> On May 23, 2011, at 12:56 PM, Sean Robert McGuffee wrote:
> 
>> I'm not sure what you mean by, "any tests you run in configure will ignore it
>> since autoconf only uses LIBS and not PKG_LIBS." I though autoconf used any
>> variable names you tell it to, so that it would use PKG_LIBS if you tell it
>> to. 
>> 
> 
> No, many variables have a special meanings in autoconf, such as CC, CPP,
> CFLAGS, LIBS, LDFLAGS etc. When you run tests like AC_PROG*, AC_HEADER*,
> AC_CHECK_*, AC_COMPILE*, AC_LINK* then those use (and set) only the variables
> supported by configure and they have no idea about things like PKG_LIBS. So as
> far as autoconf is concerned PKG_LIBS has no effect.

I'm not familiar with all of the AC_* commands, but I'm pretty sure that
AC_SUBST(PKG_LIBS) will properly set the variable PKG_LIBS or any variable
you like. You can run tests to set it how you like before you run AC_SUBST
too. For example,
if test [ -n "$lmmin_include_path" ] ; then
   LMMIN_INCLUDE_CXXFLAGS="-I${lmmin_include_path}"
else
   if test [ -n "${LMMIN_INCLUDE}" ] ; then
  LMMIN_INCLUDE_CXXFLAGS="-I${LMMIN_INCLUDE}"
   else
  LMMIN_INCLUDE_CXXFLAGS="-I/default
   fi
fi
AC_SUBST(LMMIN_INCLUDE_CXXFLAGS)

> 
> Because R has its own building process, using autoconf with packages means you
> have to a) set autoconf's flags to match the R configuration before you do
> anything, b) use autoconf tests which implies using autoconf's flags, c) map
> resulting autoconf flags to special R package flags. If you skip any of a,b,c
> the result will not be reliable. In theory, you can handle R's flags and
> autoconf flags in parallel, i.e., updating both in the success branch of each
> test, but that's a bit too tedious to implement (you can't use the autoconf
> default actions) and unnecessary.
> 
> 
>> Also, I'm still not clear as to what a Makevars file is. To clarify, I do
>> understand a Makefile. When GNU's make program is run, it looks for a
>> Makefile and interprets it in ways that are documented very well by GNU. I
>> have yet to find any lead as to what a Makevars file is, what to put in it,
>> what it does, or how it helps in installation with R packages. I can
>> understand how to define variables in it, but the only way I know how to use
>> variables that are defined is by using them in a Makefile. Where and how are
>> variables defined in Makevars used?
>> 
> 
> Makevars is simply a file included in R's Makefile when it is building the
> package. 

I think this if *EXTREMEMLY* useful information and should be appended to
the beginning of "Writing R Extensions: 1.2.1 Using Makevars." Thank you so
much for sharing this crucial piece of information. Now it all makes sense.

> So, technically, it is a makefile. The difference between Makevars
> and Makefile is that Makevars doesn't need to specify any rules or variables
> that R already knows about, because they are already included by R. So it is
> much more convenient since it saves you a lot of trouble trying to setup the
> correct rules for compilation, linking etc. At the same time, it is a makefile
> so you can add targets, modify dependencies etc., you're not constrained to
> just setting variables although that is its primary use.
> 
> In practice Makevars can be used in several ways:
> 
> a) just set PKG_CFLAGS, PKG_LIBS
> this is the most common use and it leaves the standard targets in place so R
> will use those to compile $(SHLIB) automatically
> 
> b) include additional targets:
> if you have additional features to build, you can specify them in a target,
> for example this is form rJava:
> 
> all: $(SHLIB) @WANT_JRI_TRUE@ jri
> jri: ... 
> 
> It builds the standard $(SHLIB) which is loaded by the package, but it also
> builds a separate target "jri" if enabled in configure
> 
> c) include dependencies:
> you can add dependent builds that are needed for your $(SHLIB), for example
> from RSQLite:
> 
> all: $(SHLIB)
> $(SHLIB): do_includes
> do_includes:
> 
> This makes sure that do_includes is built before R attempts to build the
> .so/.dll
> 
> 
> So, as you can see you Makevars gives you the flexibility of Makefile but
> without the hassle.
> 
> Cheers,
> Simon
>

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] Calling Rscript from Makevars

2011-05-23 Thread Simon Urbanek
Sean,

On May 23, 2011, at 2:03 PM, Sean Robert McGuffee wrote:

> 
> On 5/23/11 1:30 PM, "Simon Urbanek"  wrote:
> 
>> 
>> On May 23, 2011, at 12:56 PM, Sean Robert McGuffee wrote:
>> 
>>> I'm not sure what you mean by, "any tests you run in configure will ignore 
>>> it
>>> since autoconf only uses LIBS and not PKG_LIBS." I though autoconf used any
>>> variable names you tell it to, so that it would use PKG_LIBS if you tell it
>>> to. 
>>> 
>> 
>> No, many variables have a special meanings in autoconf, such as CC, CPP,
>> CFLAGS, LIBS, LDFLAGS etc. When you run tests like AC_PROG*, AC_HEADER*,
>> AC_CHECK_*, AC_COMPILE*, AC_LINK* then those use (and set) only the variables
>> supported by configure and they have no idea about things like PKG_LIBS. So 
>> as
>> far as autoconf is concerned PKG_LIBS has no effect.
> 
> I'm not familiar with all of the AC_* commands, but I'm pretty sure that
> AC_SUBST(PKG_LIBS) will properly set the variable PKG_LIBS or any variable
> you like. You can run tests to set it how you like before you run AC_SUBST
> too. For example,
> if test [ -n "$lmmin_include_path" ] ; then
>   LMMIN_INCLUDE_CXXFLAGS="-I${lmmin_include_path}"
> else
>   if test [ -n "${LMMIN_INCLUDE}" ] ; then
>  LMMIN_INCLUDE_CXXFLAGS="-I${LMMIN_INCLUDE}"
>   else
>  LMMIN_INCLUDE_CXXFLAGS="-I/default
>   fi
> fi
> AC_SUBST(LMMIN_INCLUDE_CXXFLAGS)
> 

Yes, but the above don't actually test anything - it just performs a shell 
substitution, you still have no idea if that actually works. The point of 
autoconf is to provide tests of functionality - that's what all the tests I 
mentioned are about. If you just wanted to replace a variable, you can use sed 
and skip all autoconf ;) - or in fact you can simply use Makevars since that 
gives you all shell functionality and you don't sacrifice the ability to 
support multiple architectures (see my previous comment why configure should be 
only used if absolutely necessary as it impedes the package build process).


>> Because R has its own building process, using autoconf with packages means 
>> you
>> have to a) set autoconf's flags to match the R configuration before you do
>> anything, b) use autoconf tests which implies using autoconf's flags, c) map
>> resulting autoconf flags to special R package flags. If you skip any of a,b,c
>> the result will not be reliable. In theory, you can handle R's flags and
>> autoconf flags in parallel, i.e., updating both in the success branch of each
>> test, but that's a bit too tedious to implement (you can't use the autoconf
>> default actions) and unnecessary.
>> 
>> 
>>> Also, I'm still not clear as to what a Makevars file is. To clarify, I do
>>> understand a Makefile. When GNU's make program is run, it looks for a
>>> Makefile and interprets it in ways that are documented very well by GNU. I
>>> have yet to find any lead as to what a Makevars file is, what to put in it,
>>> what it does, or how it helps in installation with R packages. I can
>>> understand how to define variables in it, but the only way I know how to use
>>> variables that are defined is by using them in a Makefile. Where and how are
>>> variables defined in Makevars used?
>>> 
>> 
>> Makevars is simply a file included in R's Makefile when it is building the
>> package. 
> 
> I think this if *EXTREMEMLY* useful information and should be appended to
> the beginning of "Writing R Extensions: 1.2.1 Using Makevars." Thank you so
> much for sharing this crucial piece of information. Now it all makes sense.
> 

>From R-admin: http://r.research.att.com/man/R-exts.html#Using-Makevars

"There are some macros which are set whilst configuring the building of R 
itself and are stored in R_HOME/etcR_ARCH/Makeconf. That makefile is included 
as a Makefile afterMakevars[.win], and the macros it defines can be used in 
macro assignments and make command lines in the latter."

(this attempts makes clear that Makevars is a makefile included before Makeconf)

and

"Note that Makevars should not normally contain targets, as it is included 
before the default makefile and make will call the first target, intended to be 
all in the default makefile. If you really need to circumvent that, use a 
suitable (phony) target all before any actual targets in Makevars.[win]:"

(this attempts to make clear that you can define targets in Makevars even if 
it's not customary)

Cheers,
Simon


>> So, technically, it is a makefile. The difference between Makevars
>> and Makefile is that Makevars doesn't need to specify any rules or variables
>> that R already knows about, because they are already included by R. So it is
>> much more convenient since it saves you a lot of trouble trying to setup the
>> correct rules for compilation, linking etc. At the same time, it is a 
>> makefile
>> so you can add targets, modify dependencies etc., you're not constrained to
>> just setting variables although that is its primary use.
>> 
>> In practice Makevars can be used in several ways:
>>