Hi, Out of laziness I just used "R CMD batch" instead of "R CMD BATCH". I didn't get an error so didn't think about the consequences... One consequence is (at least on Mac OS X 10.11 but probably in more generality) that R_BATCH_OPTIONS are ignored, which was kind of fatal in my case... I am thus wondering whether it makes sense to either a) have R_BATCH_OPTIONS also be respected for "R CMD batch" or b) simply not allow "R CMD batch" as a valid command (so requiring to use "R CMD BATCH"). Both approaches might be delicate... just wanted to point this issue out... Cheers, M
R CMD BATCH vs R CMD batch
7 messages · Marius Hofert, Dirk Eddelbuettel, Deepayan Sarkar +2 more
On 28 October 2015 at 21:39, Marius Hofert wrote:
| Out of laziness I just used "R CMD batch" instead of "R CMD BATCH". I | didn't get an error so didn't think about the consequences... One | consequence is (at least on Mac OS X 10.11 but probably in more | generality) that R_BATCH_OPTIONS are ignored, which was kind of fatal | in my case... I am thus wondering whether it makes sense to either a) | have R_BATCH_OPTIONS also be respected for "R CMD batch" or b) simply | not allow "R CMD batch" as a valid command (so requiring to use "R CMD | BATCH"). Both approaches might be delicate... just wanted to point | this issue out... Same reason we have 'R CMD INSTALL' as there often is /usr/bin/install with different options ... In general 'R CMD foo' will run for any 'foo' in the path: edd at max:~$ R CMD date Wed Oct 28 21:05:01 CDT 2015 edd at max:~$ Dirk
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
Dirk Eddelbuettel <edd at debian.org> writes:
On 28 October 2015 at 21:39, Marius Hofert wrote: | Out of laziness I just used "R CMD batch" instead of "R CMD BATCH". I | didn't get an error so didn't think about the consequences... One | consequence is (at least on Mac OS X 10.11 but probably in more | generality) that R_BATCH_OPTIONS are ignored, which was kind of fatal | in my case... I am thus wondering whether it makes sense to either a) | have R_BATCH_OPTIONS also be respected for "R CMD batch" or b) simply | not allow "R CMD batch" as a valid command (so requiring to use "R CMD | BATCH"). Both approaches might be delicate... just wanted to point | this issue out... Same reason we have 'R CMD INSTALL' as there often is /usr/bin/install with different options ... In general 'R CMD foo' will run for any 'foo' in the path: edd at max:~$ R CMD date Wed Oct 28 21:05:01 CDT 2015 edd at max:~$
So what is R CMD exactly doing in this example? The output is the same if I say only the command (using pwd as otherwise the time has changed...): ,---- | 09:35:03 ~$ R CMD pwd | /Users/rainerkrug | 09:35:37 ~$ R CMD pwd | /Users/rainerkrug | 09:37:44 ~$ pwd | /Users/rainerkrug | 09:37:49 ~$ `---- And this happens, except in cases where the foo is defined as a CMD in R (build, ...): ,---- | Commands: | BATCH Run R in batch mode | COMPILE Compile files for use with R | SHLIB Build shared library for dynamic loading | INSTALL Install add-on packages | REMOVE Remove add-on packages | build Build add-on packages | check Check add-on packages | LINK Front-end for creating executable programs | Rprof Post-process R profiling files | Rdconv Convert Rd format to various other formats | Rd2pdf Convert Rd format to PDF | Rd2txt Convert Rd format to pretty text | Stangle Extract S/R code from Sweave documentation | Sweave Process Sweave documentation | Rdiff Diff R output ignoring headers etc | config Obtain configuration information about R | javareconf Update the Java configuration variables | rtags Create Emacs-style tag files from C, R, and Rd files `---- Unless I miss something, is this is an inconsistency in R? Rainer
Dirk
Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D): +49 - (0)3 21 21 25 22 44 email: Rainer at krugs.de Skype: RMkrug PGP: 0x0F52F982 -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 454 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20151029/84e78acb/attachment.bin>
On Thu, Oct 29, 2015 at 2:09 PM, Rainer M Krug <Rainer at krugs.de> wrote:
Dirk Eddelbuettel <edd at debian.org> writes:
On 28 October 2015 at 21:39, Marius Hofert wrote: | Out of laziness I just used "R CMD batch" instead of "R CMD BATCH". I | didn't get an error so didn't think about the consequences... One | consequence is (at least on Mac OS X 10.11 but probably in more | generality) that R_BATCH_OPTIONS are ignored, which was kind of fatal | in my case... I am thus wondering whether it makes sense to either a) | have R_BATCH_OPTIONS also be respected for "R CMD batch" or b) simply | not allow "R CMD batch" as a valid command (so requiring to use "R CMD | BATCH"). Both approaches might be delicate... just wanted to point | this issue out... Same reason we have 'R CMD INSTALL' as there often is /usr/bin/install with different options ... In general 'R CMD foo' will run for any 'foo' in the path: edd at max:~$ R CMD date Wed Oct 28 21:05:01 CDT 2015 edd at max:~$
So what is R CMD exactly doing in this example? The output is the same if I say only the command (using pwd as otherwise the time has changed...): ,---- | 09:35:03 ~$ R CMD pwd | /Users/rainerkrug | 09:35:37 ~$ R CMD pwd | /Users/rainerkrug | 09:37:44 ~$ pwd | /Users/rainerkrug | 09:37:49 ~$ `---- And this happens, except in cases where the foo is defined as a CMD in R (build, ...): ,---- | Commands: | BATCH Run R in batch mode | COMPILE Compile files for use with R | SHLIB Build shared library for dynamic loading | INSTALL Install add-on packages | REMOVE Remove add-on packages | build Build add-on packages | check Check add-on packages | LINK Front-end for creating executable programs | Rprof Post-process R profiling files | Rdconv Convert Rd format to various other formats | Rd2pdf Convert Rd format to PDF | Rd2txt Convert Rd format to pretty text | Stangle Extract S/R code from Sweave documentation | Sweave Process Sweave documentation | Rdiff Diff R output ignoring headers etc | config Obtain configuration information about R | javareconf Update the Java configuration variables | rtags Create Emacs-style tag files from C, R, and Rd files `---- Unless I miss something, is this is an inconsistency in R?
One important difference (not sure if the only one) is that R CMD defines more environment variables. Compare env | grep -i tex R CMD env | grep -i tex So for example R CMD pdflatex will behave differently from plain pdflatex. -Deepayan
Deepayan Sarkar <deepayan.sarkar at gmail.com> writes:
On Thu, Oct 29, 2015 at 2:09 PM, Rainer M Krug <Rainer at krugs.de> wrote:
Dirk Eddelbuettel <edd at debian.org> writes:
On 28 October 2015 at 21:39, Marius Hofert wrote: | Out of laziness I just used "R CMD batch" instead of "R CMD BATCH". I | didn't get an error so didn't think about the consequences... One | consequence is (at least on Mac OS X 10.11 but probably in more | generality) that R_BATCH_OPTIONS are ignored, which was kind of fatal | in my case... I am thus wondering whether it makes sense to either a) | have R_BATCH_OPTIONS also be respected for "R CMD batch" or b) simply | not allow "R CMD batch" as a valid command (so requiring to use "R CMD | BATCH"). Both approaches might be delicate... just wanted to point | this issue out... Same reason we have 'R CMD INSTALL' as there often is /usr/bin/install with different options ... In general 'R CMD foo' will run for any 'foo' in the path: edd at max:~$ R CMD date Wed Oct 28 21:05:01 CDT 2015 edd at max:~$
So what is R CMD exactly doing in this example? The output is the same if I say only the command (using pwd as otherwise the time has changed...): ,---- | 09:35:03 ~$ R CMD pwd | /Users/rainerkrug | 09:35:37 ~$ R CMD pwd | /Users/rainerkrug | 09:37:44 ~$ pwd | /Users/rainerkrug | 09:37:49 ~$ `---- And this happens, except in cases where the foo is defined as a CMD in R (build, ...): ,---- | Commands: | BATCH Run R in batch mode | COMPILE Compile files for use with R | SHLIB Build shared library for dynamic loading | INSTALL Install add-on packages | REMOVE Remove add-on packages | build Build add-on packages | check Check add-on packages | LINK Front-end for creating executable programs | Rprof Post-process R profiling files | Rdconv Convert Rd format to various other formats | Rd2pdf Convert Rd format to PDF | Rd2txt Convert Rd format to pretty text | Stangle Extract S/R code from Sweave documentation | Sweave Process Sweave documentation | Rdiff Diff R output ignoring headers etc | config Obtain configuration information about R | javareconf Update the Java configuration variables | rtags Create Emacs-style tag files from C, R, and Rd files `---- Unless I miss something, is this is an inconsistency in R?
One important difference (not sure if the only one) is that R CMD defines more environment variables. Compare env | grep -i tex R CMD env | grep -i tex So for example R CMD pdflatex will behave differently from plain pdflatex.
Reading Dirk's email again, I think I get the picture of what ~R CMD foo~ is doing: running ~foo~ after doing some initial magic. Out of interest: What is the magic ~R CMD~ is doing? Is it documented anywhere? Rainer
-Deepayan
Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D): +49 - (0)3 21 21 25 22 44 email: Rainer at krugs.de Skype: RMkrug PGP: 0x0F52F982 -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 454 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20151029/9590fa6c/attachment.bin>
On 29 Oct 2015, at 10:44 , Rainer M Krug <Rainer at krugs.de> wrote:
Out of interest: What is the magic ~R CMD~ is doing? Is it documented anywhere?
R is open source.... (and shell scripts are considered self-documenting by some)
On Unix-alikes, R is a shell script which, if called with 1st argument CMD, calls ${R_HOME}/bin/Rcmd, which is another shell script that ends with
case "${1}" in
## this was a separate command prior to 2.10.0
Rd2txt)
cmd="${R_HOME}/bin/Rdconv"
extra="-t txt"
;;
## removed in 2.15.0
Rd2dvi)
echo "R CMD Rd2dvi is defunct: use Rd2pdf instead"
exit 1
;;
*)
if test -x "${R_HOME}/bin/${1}"; then
cmd="${R_HOME}/bin/${1}"
else
cmd="${1}"
fi
;;
esac
shift
exec "${cmd}" ${extra} "${@}"
I.e., except for setting up variables and such, R CMD ${foo} essentially looks for ${R_HOME}/bin/${foo} and executes it if it exists and is executable, otherwise it just executes ${foo}.
Notice that, somewhat contrary to what Dirk said, this logic works at the mercy of the file system when it comes to case sensitivity. On OSX with the default case-insensitive setup we get
Peters-iMac:IBP pd$ R CMD install
Error: ERROR: no packages specified
which comes from R's package installer, whereas a case-sensitive FS would pick up /usr/bin/install instead. That is just how the "test" shell built-in works:
Peters-iMac:~ pd$ test -x `R RHOME`/bin/INSTALL ; echo $?
0
Peters-iMac:~ pd$ test -x `R RHOME`/bin/UNSTALL ; echo $?
1
Peters-iMac:~ pd$ test -x `R RHOME`/bin/install ; echo $?
0
Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
peter dalgaard <pdalgd at gmail.com> writes:
On 29 Oct 2015, at 10:44 , Rainer M Krug <Rainer at krugs.de> wrote:
Out of interest: What is the magic ~R CMD~ is doing? Is it documented anywhere?
R is open source.... (and shell scripts are considered self-documenting by some)
True - should have looked in the sources...
On Unix-alikes, R is a shell script which, if called with 1st argument
CMD, calls ${R_HOME}/bin/Rcmd, which is another shell script that ends
with
case "${1}" in
## this was a separate command prior to 2.10.0
Rd2txt)
cmd="${R_HOME}/bin/Rdconv"
extra="-t txt"
;;
## removed in 2.15.0
Rd2dvi)
echo "R CMD Rd2dvi is defunct: use Rd2pdf instead"
exit 1
;;
*)
if test -x "${R_HOME}/bin/${1}"; then
cmd="${R_HOME}/bin/${1}"
else
cmd="${1}"
fi
;;
esac
shift
exec "${cmd}" ${extra} "${@}"
I.e., except for setting up variables and such, R CMD ${foo}
essentially looks for ${R_HOME}/bin/${foo} and executes it if it
exists and is executable, otherwise it just executes ${foo}.
Thanks for that detailed explanation of the mechanism - it is much clearer now. And as usual, if one knows how something is happening, it's not "magical" anymore.
Notice that, somewhat contrary to what Dirk said, this logic works at the mercy of the file system when it comes to case sensitivity. On OSX with the default case-insensitive setup we get Peters-iMac:IBP pd$ R CMD install Error: ERROR: no packages specified which comes from R's package installer, whereas a case-sensitive FS would pick up /usr/bin/install instead. That is just how the "test" shell built-in works: Peters-iMac:~ pd$ test -x `R RHOME`/bin/INSTALL ; echo $? 0 Peters-iMac:~ pd$ test -x `R RHOME`/bin/UNSTALL ; echo $? 1 Peters-iMac:~ pd$ test -x `R RHOME`/bin/install ; echo $? 0
Yeah - true. I was already starting to wonder as I always was using ~R CMD install~ and it always worked on my Mac. Thanks again, Rainer
Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D): +49 - (0)3 21 21 25 22 44 email: Rainer at krugs.de Skype: RMkrug PGP: 0x0F52F982 -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 454 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20151029/a723b94f/attachment.bin>