[Rd] Rcmdr package dependencies

2009-09-22 Thread John Fox
Dear r-devel members,

My Rcmdr package depends on several other packages (tcltk, grDevices,
utils, and car) and suggests a number of others (abind, aplpack,
colorspace, effects, foreign, grid, Hmisc, lattice, leaps, lmtest, MASS,
mgcv, multcomp, nlme, nnet, relimp, rgl, and RODBC). The reason for the
distinction is that I don't want all of these packages to load when the
Rcmdr loads; rather, the suggested packages are loaded as they're needed.
But all of the packages -- both those under depends and those under
suggests -- really are necessary for all of the features of the Rcmdr to
work. For example, if the leaps package is absent, then the Subset model
selection item in the Models menu is suppressed.

This arrangement works reasonably well, but it makes it awkward to install
the Rcmdr. If the user issues the command install.packages(Rcmdr), then
the suggested packages aren't installed. On the other hand, if the user
issues the command install.packages(Rcmdr, dependencies=TRUE), which is
what I currently recommend, then suggested packages are installed
recursively, causing dozens of packages, most of them actually unnecessary,
to be installed. This issue has been growing more acute, and at this point
even with a fast Internet connection it takes quite a while for all of the
dependencies to download and install.

I wonder whether I've missed something. Is there a way for me to arrange the
Rcmdr package dependencies so that only the necessary packages (those
currently listed under both depends and suggests and the packages on
which they depend) are installed along with the Rcmdr, but the currently
suggested packages aren't loaded when the Rcmdr loads?

Any help would be appreciated.

John 

--
John Fox, Professor
Department of Sociology
McMaster University
Hamilton, Ontario, Canada
web: socserv.mcmaster.ca/jfox

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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread Uwe Ligges



John Fox wrote:

Dear r-devel members,

My Rcmdr package depends on several other packages (tcltk, grDevices,
utils, and car) and suggests a number of others (abind, aplpack,
colorspace, effects, foreign, grid, Hmisc, lattice, leaps, lmtest, MASS,
mgcv, multcomp, nlme, nnet, relimp, rgl, and RODBC). The reason for the
distinction is that I don't want all of these packages to load when the
Rcmdr loads; rather, the suggested packages are loaded as they're needed.
But all of the packages -- both those under depends and those under
suggests -- really are necessary for all of the features of the Rcmdr to
work. For example, if the leaps package is absent, then the Subset model
selection item in the Models menu is suppressed.

This arrangement works reasonably well, but it makes it awkward to install
the Rcmdr. If the user issues the command install.packages(Rcmdr), then
the suggested packages aren't installed. On the other hand, if the user
issues the command install.packages(Rcmdr, dependencies=TRUE), which is
what I currently recommend, then suggested packages are installed
recursively, causing dozens of packages, most of them actually unnecessary,
to be installed. This issue has been growing more acute, and at this point
even with a fast Internet connection it takes quite a while for all of the
dependencies to download and install.

I wonder whether I've missed something. Is there a way for me to arrange the
Rcmdr package dependencies so that only the necessary packages (those
currently listed under both depends and suggests and the packages on
which they depend) are installed along with the Rcmdr, but the currently
suggested packages aren't loaded when the Rcmdr loads?




Dear John,

no, this is not possible.

Consider your package A (or Rcmdr) suggests B that suggests C.
Then A::foo uses the function B::bar which only works if C::dep is 
present. B works essentially without C but it requires C just to make 
bar work. Then this means your A::foo won't work if C is not installed 
and you won't get it with the setup mentioned above.


In summary, I fear what you want might work well *now* (by chance), but 
it does not work in general.


Best wishes,
Uwe







Any help would be appreciated.

John 


--
John Fox, Professor
Department of Sociology
McMaster University
Hamilton, Ontario, Canada
web: socserv.mcmaster.ca/jfox

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


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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread Gabor Grothendieck
Create a package called RcmdrInstall, say, with no content and have it
depend on Rcmdr.  RcmdrInstall would have all packages as dependencies
while Rcmdr would only have the essential packages as dependencies.

Install RcmdrInstall.  That would also force Rcmdr to be installed.

Now issue:

   library(Rcmdr)

as before and the non-essentials won't be loaded.

Thus the only difference between the current procedure and the new
procedure as far as the user is concerned is that they install
RcmdrInstall rather than Rcmdr.  They load and run Rcmdr in the same
way.

On Tue, Sep 22, 2009 at 9:15 AM, John Fox j...@mcmaster.ca wrote:
 Dear r-devel members,

 My Rcmdr package depends on several other packages (tcltk, grDevices,
 utils, and car) and suggests a number of others (abind, aplpack,
 colorspace, effects, foreign, grid, Hmisc, lattice, leaps, lmtest, MASS,
 mgcv, multcomp, nlme, nnet, relimp, rgl, and RODBC). The reason for the
 distinction is that I don't want all of these packages to load when the
 Rcmdr loads; rather, the suggested packages are loaded as they're needed.
 But all of the packages -- both those under depends and those under
 suggests -- really are necessary for all of the features of the Rcmdr to
 work. For example, if the leaps package is absent, then the Subset model
 selection item in the Models menu is suppressed.

 This arrangement works reasonably well, but it makes it awkward to install
 the Rcmdr. If the user issues the command install.packages(Rcmdr), then
 the suggested packages aren't installed. On the other hand, if the user
 issues the command install.packages(Rcmdr, dependencies=TRUE), which is
 what I currently recommend, then suggested packages are installed
 recursively, causing dozens of packages, most of them actually unnecessary,
 to be installed. This issue has been growing more acute, and at this point
 even with a fast Internet connection it takes quite a while for all of the
 dependencies to download and install.

 I wonder whether I've missed something. Is there a way for me to arrange the
 Rcmdr package dependencies so that only the necessary packages (those
 currently listed under both depends and suggests and the packages on
 which they depend) are installed along with the Rcmdr, but the currently
 suggested packages aren't loaded when the Rcmdr loads?

 Any help would be appreciated.

 John

 --
 John Fox, Professor
 Department of Sociology
 McMaster University
 Hamilton, Ontario, Canada
 web: socserv.mcmaster.ca/jfox

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


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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread John Fox
Dear Uwe,

 -Original Message-
 From: Uwe Ligges [mailto:lig...@statistik.tu-dortmund.de]
 Sent: September-22-09 2:17 PM
 To: John Fox
 Cc: r-devel@r-project.org
 Subject: Re: [Rd] Rcmdr package dependencies
 
 
 
 John Fox wrote:
  Dear r-devel members,
 
  My Rcmdr package depends on several other packages (tcltk, grDevices,
  utils, and car) and suggests a number of others (abind, aplpack,
  colorspace, effects, foreign, grid, Hmisc, lattice, leaps, lmtest, MASS,
  mgcv, multcomp, nlme, nnet, relimp, rgl, and RODBC). The reason for the
  distinction is that I don't want all of these packages to load when the
  Rcmdr loads; rather, the suggested packages are loaded as they're
needed.
  But all of the packages -- both those under depends and those under
  suggests -- really are necessary for all of the features of the Rcmdr
to
  work. For example, if the leaps package is absent, then the Subset
model
  selection item in the Models menu is suppressed.
 
  This arrangement works reasonably well, but it makes it awkward to
install
  the Rcmdr. If the user issues the command install.packages(Rcmdr),
then
  the suggested packages aren't installed. On the other hand, if the
user
  issues the command install.packages(Rcmdr, dependencies=TRUE), which
is
  what I currently recommend, then suggested packages are installed
  recursively, causing dozens of packages, most of them actually
unnecessary,
  to be installed. This issue has been growing more acute, and at this
point
  even with a fast Internet connection it takes quite a while for all of
the
  dependencies to download and install.
 
  I wonder whether I've missed something. Is there a way for me to arrange
 the
  Rcmdr package dependencies so that only the necessary packages (those
  currently listed under both depends and suggests and the packages on
  which they depend) are installed along with the Rcmdr, but the
currently
  suggested packages aren't loaded when the Rcmdr loads?
 
 
 
 Dear John,
 
 no, this is not possible.
 
 Consider your package A (or Rcmdr) suggests B that suggests C.
 Then A::foo uses the function B::bar which only works if C::dep is
 present. B works essentially without C but it requires C just to make
 bar work. Then this means your A::foo won't work if C is not installed
 and you won't get it with the setup mentioned above.
 
 In summary, I fear what you want might work well *now* (by chance), but
 it does not work in general.

I agree that what I want to do isn't bullet-proof. I think, however, that in
most, if not all, cases, the Rcmdr dialogs will work even if packages
suggested by currently directly suggested packages were not installed. In
fact, this is what happens when a package is installed with the default
dependencies=FALSE. If it turns out that some such indirect dependency is
actually necessary, I could add that package to those directly suggested
(were such a mechanism possible). I'd save users a lot of downloads at the
price of occasionally having to specify a dependency explicitly.

Thanks,
 John

 
 Best wishes,
 Uwe
 
 
 
 
 
 
  Any help would be appreciated.
 
  John
 
  --
  John Fox, Professor
  Department of Sociology
  McMaster University
  Hamilton, Ontario, Canada
  web: socserv.mcmaster.ca/jfox
 
  __
  R-devel@r-project.org mailing list
  https://stat.ethz.ch/mailman/listinfo/r-devel

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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread John Fox
Dear Gabor,

I thought of this solution but rejected it, perhaps too hastily, because it
seemed awkward. I suppose, however, that since the Rcmdr package would be
unchanged, a user could choose to install it as at present with
dependencies=TRUE, or alternatively install the RcmdrInstall package and
avoid the recursive installation of suggested packages. Maybe the idea is a
good one after all.

Thank you,
 John


 -Original Message-
 From: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
 Sent: September-22-09 2:32 PM
 To: John Fox
 Cc: r-devel@r-project.org
 Subject: Re: [Rd] Rcmdr package dependencies
 
 Create a package called RcmdrInstall, say, with no content and have it
 depend on Rcmdr.  RcmdrInstall would have all packages as dependencies
 while Rcmdr would only have the essential packages as dependencies.
 
 Install RcmdrInstall.  That would also force Rcmdr to be installed.
 
 Now issue:
 
library(Rcmdr)
 
 as before and the non-essentials won't be loaded.
 
 Thus the only difference between the current procedure and the new
 procedure as far as the user is concerned is that they install
 RcmdrInstall rather than Rcmdr.  They load and run Rcmdr in the same
 way.
 
 On Tue, Sep 22, 2009 at 9:15 AM, John Fox j...@mcmaster.ca wrote:
  Dear r-devel members,
 
  My Rcmdr package depends on several other packages (tcltk, grDevices,
  utils, and car) and suggests a number of others (abind, aplpack,
  colorspace, effects, foreign, grid, Hmisc, lattice, leaps, lmtest, MASS,
  mgcv, multcomp, nlme, nnet, relimp, rgl, and RODBC). The reason for the
  distinction is that I don't want all of these packages to load when the
  Rcmdr loads; rather, the suggested packages are loaded as they're
needed.
  But all of the packages -- both those under depends and those under
  suggests -- really are necessary for all of the features of the Rcmdr
to
  work. For example, if the leaps package is absent, then the Subset
model
  selection item in the Models menu is suppressed.
 
  This arrangement works reasonably well, but it makes it awkward to
install
  the Rcmdr. If the user issues the command install.packages(Rcmdr),
then
  the suggested packages aren't installed. On the other hand, if the
user
  issues the command install.packages(Rcmdr, dependencies=TRUE), which
is
  what I currently recommend, then suggested packages are installed
  recursively, causing dozens of packages, most of them actually
unnecessary,
  to be installed. This issue has been growing more acute, and at this
point
  even with a fast Internet connection it takes quite a while for all of
the
  dependencies to download and install.
 
  I wonder whether I've missed something. Is there a way for me to arrange
 the
  Rcmdr package dependencies so that only the necessary packages (those
  currently listed under both depends and suggests and the packages on
  which they depend) are installed along with the Rcmdr, but the
currently
  suggested packages aren't loaded when the Rcmdr loads?
 
  Any help would be appreciated.
 
  John
 
  --
  John Fox, Professor
  Department of Sociology
  McMaster University
  Hamilton, Ontario, Canada
  web: socserv.mcmaster.ca/jfox
 
  __
  R-devel@r-project.org mailing list
  https://stat.ethz.ch/mailman/listinfo/r-devel
 

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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread Gabor Grothendieck
To make it foolproof at Rcmdr's load time (i.e. in the .onLoad
function) you could check whether RcmdrInstall was available (not
necessarily loaded, just available).  If not, then you could issue a
message asking the user to install it.  This would help the user avoid
the situation where they install Rcmdr without RcmdrInstall and
thereby not have the other packages available.

On Tue, Sep 22, 2009 at 2:54 PM, John Fox j...@mcmaster.ca wrote:
 Dear Gabor,

 I thought of this solution but rejected it, perhaps too hastily, because it
 seemed awkward. I suppose, however, that since the Rcmdr package would be
 unchanged, a user could choose to install it as at present with
 dependencies=TRUE, or alternatively install the RcmdrInstall package and
 avoid the recursive installation of suggested packages. Maybe the idea is a
 good one after all.

 Thank you,
  John


 -Original Message-
 From: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
 Sent: September-22-09 2:32 PM
 To: John Fox
 Cc: r-devel@r-project.org
 Subject: Re: [Rd] Rcmdr package dependencies

 Create a package called RcmdrInstall, say, with no content and have it
 depend on Rcmdr.  RcmdrInstall would have all packages as dependencies
 while Rcmdr would only have the essential packages as dependencies.

 Install RcmdrInstall.  That would also force Rcmdr to be installed.

 Now issue:

    library(Rcmdr)

 as before and the non-essentials won't be loaded.

 Thus the only difference between the current procedure and the new
 procedure as far as the user is concerned is that they install
 RcmdrInstall rather than Rcmdr.  They load and run Rcmdr in the same
 way.

 On Tue, Sep 22, 2009 at 9:15 AM, John Fox j...@mcmaster.ca wrote:
  Dear r-devel members,
 
  My Rcmdr package depends on several other packages (tcltk, grDevices,
  utils, and car) and suggests a number of others (abind, aplpack,
  colorspace, effects, foreign, grid, Hmisc, lattice, leaps, lmtest, MASS,
  mgcv, multcomp, nlme, nnet, relimp, rgl, and RODBC). The reason for the
  distinction is that I don't want all of these packages to load when the
  Rcmdr loads; rather, the suggested packages are loaded as they're
 needed.
  But all of the packages -- both those under depends and those under
  suggests -- really are necessary for all of the features of the Rcmdr
 to
  work. For example, if the leaps package is absent, then the Subset
 model
  selection item in the Models menu is suppressed.
 
  This arrangement works reasonably well, but it makes it awkward to
 install
  the Rcmdr. If the user issues the command install.packages(Rcmdr),
 then
  the suggested packages aren't installed. On the other hand, if the
 user
  issues the command install.packages(Rcmdr, dependencies=TRUE), which
 is
  what I currently recommend, then suggested packages are installed
  recursively, causing dozens of packages, most of them actually
 unnecessary,
  to be installed. This issue has been growing more acute, and at this
 point
  even with a fast Internet connection it takes quite a while for all of
 the
  dependencies to download and install.
 
  I wonder whether I've missed something. Is there a way for me to arrange
 the
  Rcmdr package dependencies so that only the necessary packages (those
  currently listed under both depends and suggests and the packages on
  which they depend) are installed along with the Rcmdr, but the
 currently
  suggested packages aren't loaded when the Rcmdr loads?
 
  Any help would be appreciated.
 
  John
 
  --
  John Fox, Professor
  Department of Sociology
  McMaster University
  Hamilton, Ontario, Canada
  web: socserv.mcmaster.ca/jfox
 
  __
  R-devel@r-project.org mailing list
  https://stat.ethz.ch/mailman/listinfo/r-devel
 




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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread John Fox
Dear Gabor,

At present, the Rcmdr package checks whether its dependencies are present
and offers to install them if they are not. Also at present, it installs its
dependencies with dep=TRUE, but that could be changed. I suppose that I
could simply rely on this mechanism rather than have a separate RcmdrInstall
package or advise users to install the Rcmdr itself with dep=TRUE.

Best,
 John


 -Original Message-
 From: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
 Sent: September-22-09 3:09 PM
 To: John Fox
 Cc: r-devel@r-project.org
 Subject: Re: [Rd] Rcmdr package dependencies
 
 To make it foolproof at Rcmdr's load time (i.e. in the .onLoad
 function) you could check whether RcmdrInstall was available (not
 necessarily loaded, just available).  If not, then you could issue a
 message asking the user to install it.  This would help the user avoid
 the situation where they install Rcmdr without RcmdrInstall and
 thereby not have the other packages available.
 
 On Tue, Sep 22, 2009 at 2:54 PM, John Fox j...@mcmaster.ca wrote:
  Dear Gabor,
 
  I thought of this solution but rejected it, perhaps too hastily, because
it
  seemed awkward. I suppose, however, that since the Rcmdr package would
be
  unchanged, a user could choose to install it as at present with
  dependencies=TRUE, or alternatively install the RcmdrInstall package and
  avoid the recursive installation of suggested packages. Maybe the idea
is a
  good one after all.
 
  Thank you,
   John
 
 
  -Original Message-
  From: Gabor Grothendieck [mailto:ggrothendi...@gmail.com]
  Sent: September-22-09 2:32 PM
  To: John Fox
  Cc: r-devel@r-project.org
  Subject: Re: [Rd] Rcmdr package dependencies
 
  Create a package called RcmdrInstall, say, with no content and have it
  depend on Rcmdr.  RcmdrInstall would have all packages as dependencies
  while Rcmdr would only have the essential packages as dependencies.
 
  Install RcmdrInstall.  That would also force Rcmdr to be installed.
 
  Now issue:
 
     library(Rcmdr)
 
  as before and the non-essentials won't be loaded.
 
  Thus the only difference between the current procedure and the new
  procedure as far as the user is concerned is that they install
  RcmdrInstall rather than Rcmdr.  They load and run Rcmdr in the same
  way.
 
  On Tue, Sep 22, 2009 at 9:15 AM, John Fox j...@mcmaster.ca wrote:
   Dear r-devel members,
  
   My Rcmdr package depends on several other packages (tcltk,
grDevices,
   utils, and car) and suggests a number of others (abind, aplpack,
   colorspace, effects, foreign, grid, Hmisc, lattice, leaps, lmtest,
MASS,
   mgcv, multcomp, nlme, nnet, relimp, rgl, and RODBC). The reason for
the
   distinction is that I don't want all of these packages to load when
the
   Rcmdr loads; rather, the suggested packages are loaded as they're
  needed.
   But all of the packages -- both those under depends and those under
   suggests -- really are necessary for all of the features of the
Rcmdr
  to
   work. For example, if the leaps package is absent, then the Subset
  model
   selection item in the Models menu is suppressed.
  
   This arrangement works reasonably well, but it makes it awkward to
  install
   the Rcmdr. If the user issues the command install.packages(Rcmdr),
  then
   the suggested packages aren't installed. On the other hand, if the
  user
   issues the command install.packages(Rcmdr, dependencies=TRUE),
which
  is
   what I currently recommend, then suggested packages are installed
   recursively, causing dozens of packages, most of them actually
  unnecessary,
   to be installed. This issue has been growing more acute, and at this
  point
   even with a fast Internet connection it takes quite a while for all
of
  the
   dependencies to download and install.
  
   I wonder whether I've missed something. Is there a way for me to
arrange
  the
   Rcmdr package dependencies so that only the necessary packages (those
   currently listed under both depends and suggests and the packages
on
   which they depend) are installed along with the Rcmdr, but the
  currently
   suggested packages aren't loaded when the Rcmdr loads?
  
   Any help would be appreciated.
  
   John
  
   --
   John Fox, Professor
   Department of Sociology
   McMaster University
   Hamilton, Ontario, Canada
   web: socserv.mcmaster.ca/jfox
  
   __
   R-devel@r-project.org mailing list
   https://stat.ethz.ch/mailman/listinfo/r-devel
  
 
 
 

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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread Uwe Ligges



John Fox wrote:

Dear Uwe,


-Original Message-
From: Uwe Ligges [mailto:lig...@statistik.tu-dortmund.de]
Sent: September-22-09 2:17 PM
To: John Fox
Cc: r-devel@r-project.org
Subject: Re: [Rd] Rcmdr package dependencies



John Fox wrote:

Dear r-devel members,

My Rcmdr package depends on several other packages (tcltk, grDevices,
utils, and car) and suggests a number of others (abind, aplpack,
colorspace, effects, foreign, grid, Hmisc, lattice, leaps, lmtest, MASS,
mgcv, multcomp, nlme, nnet, relimp, rgl, and RODBC). The reason for the
distinction is that I don't want all of these packages to load when the
Rcmdr loads; rather, the suggested packages are loaded as they're

needed.

But all of the packages -- both those under depends and those under
suggests -- really are necessary for all of the features of the Rcmdr

to

work. For example, if the leaps package is absent, then the Subset

model

selection item in the Models menu is suppressed.

This arrangement works reasonably well, but it makes it awkward to

install

the Rcmdr. If the user issues the command install.packages(Rcmdr),

then

the suggested packages aren't installed. On the other hand, if the

user

issues the command install.packages(Rcmdr, dependencies=TRUE), which

is

what I currently recommend, then suggested packages are installed
recursively, causing dozens of packages, most of them actually

unnecessary,

to be installed. This issue has been growing more acute, and at this

point

even with a fast Internet connection it takes quite a while for all of

the

dependencies to download and install.

I wonder whether I've missed something. Is there a way for me to arrange

the

Rcmdr package dependencies so that only the necessary packages (those
currently listed under both depends and suggests and the packages on
which they depend) are installed along with the Rcmdr, but the

currently

suggested packages aren't loaded when the Rcmdr loads?



Dear John,

no, this is not possible.

Consider your package A (or Rcmdr) suggests B that suggests C.
Then A::foo uses the function B::bar which only works if C::dep is
present. B works essentially without C but it requires C just to make
bar work. Then this means your A::foo won't work if C is not installed
and you won't get it with the setup mentioned above.

In summary, I fear what you want might work well *now* (by chance), but
it does not work in general.


I agree that what I want to do isn't bullet-proof. I think, however, that in
most, if not all, cases, the Rcmdr dialogs will work even if packages
suggested by currently directly suggested packages were not installed. In
fact, this is what happens when a package is installed with the default
dependencies=FALSE. If it turns out that some such indirect dependency is
actually necessary, I could add that package to those directly suggested
(were such a mechanism possible). I'd save users a lot of downloads at the
price of occasionally having to specify a dependency explicitly.



Thanks for the explanation. Unfortunately the current infrastructure 
works with recursive calling with the same arguments. In this case we'd 
need some code that allows to have the first level different from the 
rest of the recursion.
Perhaps one way to go would be to install Rcmdr including its 
dependencies (only) and provide some simple function that installs its 
suggests and their dependencies afterwards if not available. Hmmm, on he 
other hand I do now want to suggest to have yet another mechanism such 
as the biocLite function that I still dislike.


Just some thoughts, best wishes,
Uwe



Thanks,
 John


Best wishes,
Uwe







Any help would be appreciated.

John

--
John Fox, Professor
Department of Sociology
McMaster University
Hamilton, Ontario, Canada
web: socserv.mcmaster.ca/jfox

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





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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread Seth Falcon
* On 2009-09-22 at 20:16 +0200 Uwe Ligges wrote:
 no, this is not possible.
 
 Consider your package A (or Rcmdr) suggests B that suggests C.
 Then A::foo uses the function B::bar which only works if C::dep is
 present. B works essentially without C but it requires C just to
 make bar work. Then this means your A::foo won't work if C is not
 installed and you won't get it with the setup mentioned above.
 
 In summary, I fear what you want might work well *now* (by chance),
 but it does not work in general.

In general, one would expect a given package to function when its
suggested packages are not available.  As such, it seems quite
reasonable to install a package, its Depends, Imports, and Suggests,
but not install Suggests recursively.

I think you could achieve such an installation using two calls to
install.packages:

install.packages(Rcmdr)
Rcmdr.Suggests - strsplit(packageDescription(Rcmdr)$Suggests, ,\\s?)[[1]]
## need extra cleanup since packageDescription(blah)$Suggests
## Returns package names with versions as strings
wantPkgs - sub(^([^ ]+).*, \\1, Rcmdr.Suggests)
havePkgs - installed.packages()[, Package]
wantPkgs - wantPkgs[!(wantPkgs %in% havePkgs)]
install.packages(wantPkgs)

+ seth

-- 
Seth Falcon | @sfalcon | http://userprimary.net/user

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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread John Fox
Dear Seth,

 -Original Message-
 From: Seth Falcon [mailto:s...@userprimary.net]
 Sent: September-22-09 5:13 PM
 To: Uwe Ligges
 Cc: John Fox; r-devel@r-project.org
 Subject: Re: [Rd] Rcmdr package dependencies
 
 * On 2009-09-22 at 20:16 +0200 Uwe Ligges wrote:
  no, this is not possible.
 
  Consider your package A (or Rcmdr) suggests B that suggests C.
  Then A::foo uses the function B::bar which only works if C::dep is
  present. B works essentially without C but it requires C just to
  make bar work. Then this means your A::foo won't work if C is not
  installed and you won't get it with the setup mentioned above.
 
  In summary, I fear what you want might work well *now* (by chance),
  but it does not work in general.
 
 In general, one would expect a given package to function when its
 suggested packages are not available.  As such, it seems quite
 reasonable to install a package, its Depends, Imports, and Suggests,
 but not install Suggests recursively.
 
 I think you could achieve such an installation using two calls to
 install.packages:
 
 install.packages(Rcmdr)
 Rcmdr.Suggests - strsplit(packageDescription(Rcmdr)$Suggests,
 ,\\s?)[[1]]
 ## need extra cleanup since packageDescription(blah)$Suggests
 ## Returns package names with versions as strings
 wantPkgs - sub(^([^ ]+).*, \\1, Rcmdr.Suggests)
 havePkgs - installed.packages()[, Package]
 wantPkgs - wantPkgs[!(wantPkgs %in% havePkgs)]
 install.packages(wantPkgs)

The Rcmdr maintains a list of its dependencies, so it already does something
similar to this, but I like your version better because it queries the
Description file directly. I can't really expect a user to issue a command
like this, so I suppose that the best solution is, as at present, to have
the Rcmdr package do the checking and installation at start-up but to
install with dep=FALSE.

Thanks,
 John

 
 + seth
 
 --
 Seth Falcon | @sfalcon | http://userprimary.net/user

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


Re: [Rd] Rcmdr package dependencies

2009-09-22 Thread Uwe Ligges



John Fox wrote:

Dear Seth,


-Original Message-
From: Seth Falcon [mailto:s...@userprimary.net]
Sent: September-22-09 5:13 PM
To: Uwe Ligges
Cc: John Fox; r-devel@r-project.org
Subject: Re: [Rd] Rcmdr package dependencies

* On 2009-09-22 at 20:16 +0200 Uwe Ligges wrote:

no, this is not possible.

Consider your package A (or Rcmdr) suggests B that suggests C.
Then A::foo uses the function B::bar which only works if C::dep is
present. B works essentially without C but it requires C just to
make bar work. Then this means your A::foo won't work if C is not
installed and you won't get it with the setup mentioned above.

In summary, I fear what you want might work well *now* (by chance),
but it does not work in general.

In general, one would expect a given package to function when its
suggested packages are not available.  As such, it seems quite
reasonable to install a package, its Depends, Imports, and Suggests,
but not install Suggests recursively.

I think you could achieve such an installation using two calls to
install.packages:

install.packages(Rcmdr)
Rcmdr.Suggests - strsplit(packageDescription(Rcmdr)$Suggests,
,\\s?)[[1]]
## need extra cleanup since packageDescription(blah)$Suggests
## Returns package names with versions as strings
wantPkgs - sub(^([^ ]+).*, \\1, Rcmdr.Suggests)



Nice suggestion, indeed! I think there is some code in package tools 
that help to resolve these issues even more convenient:



wantPkgs - package.dependencies(available.packages()[Rcmdr,], 
depLevel = Suggests)[[Rcmdr]][,1]


so you do not need to have Rcmdr already installed and can rely on the R 
internal code that can strip all that version information.


Best wishes,
Uwe






havePkgs - installed.packages()[, Package]
wantPkgs - wantPkgs[!(wantPkgs %in% havePkgs)]
install.packages(wantPkgs)


The Rcmdr maintains a list of its dependencies, so it already does something
similar to this, but I like your version better because it queries the
Description file directly. I can't really expect a user to issue a command
like this, so I suppose that the best solution is, as at present, to have
the Rcmdr package do the checking and installation at start-up but to
install with dep=FALSE.

Thanks,
 John


+ seth

--
Seth Falcon | @sfalcon | http://userprimary.net/user





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