Dear R-devel, I have a problem defining the dependencies for a package. My package (latticist, not yet released) "Suggests" RGtk2, but specifically does not require it. If RGtk2 is available, the user can call a function that builds a GUI with RGtk2. However, I do not want to attach the RGtk2 namespace, because it is irrelevant to the user and exports about 7500 symbols. Last time I asked a similar question to this, Professor Ripley noted that the usual method to get around this situation is the use an explicit package prefix to function calls (the `::` operator). But this is not so easy with non-standard functions. Take this chunk of code: widg <- gtkComboBoxEntryNewText() widg$show() widg["width-request"] <- 100 The first call is easy to prefix, as RGtk2::gtkComboBoxEntryNewText() but the others, `$.RGtkObject` and `[<-.RGtkObject` are not. While I *could* rewrite all the code to use explicit functions, I think, the resulting code would be much less clear. Essentially what I want to do is conditionally import the RGtk2 namespace. Any suggestions? Thanks Felix -- Felix Andrews / ??? http://www.neurofractal.org/felix/ 3358 543D AAC6 22C2 D336 80D9 360B 72DD 3E4C F5D8
>>>>> "FA" == Felix Andrews <felix at nfrac.org> >>>>> on Thu, 30 Oct 2008 17:40:17 +1100 writes:FA> Dear R-devel, FA> I have a problem defining the dependencies for a package. FA> My package (latticist, not yet released) "Suggests" RGtk2, but FA> specifically does not require it. If RGtk2 is available, the user can FA> call a function that builds a GUI with RGtk2. However, I do not want FA> to attach the RGtk2 namespace, because it is irrelevant to the user FA> and exports about 7500 symbols. FA> Last time I asked a similar question to this, Professor Ripley noted FA> that the usual method to get around this situation is the use an FA> explicit package prefix to function calls (the `::` operator). But FA> this is not so easy with non-standard functions. Take this chunk of FA> code: FA> widg <- gtkComboBoxEntryNewText() FA> widg$show() FA> widg["width-request"] <- 100 FA> The first call is easy to prefix, as RGtk2::gtkComboBoxEntryNewText() FA> but the others, `$.RGtkObject` and `[<-.RGtkObject` are not. indeed. FA> While I *could* rewrite all the code to use explicit functions, I FA> think, the resulting code would be much less clear. FA> Essentially what I want to do is conditionally import the RGtk2 namespace. FA> Any suggestions? Maybe something along the line of if(is.function(try(RGtk2::gtkComboBoxEntryNewText))) { library(RGtk2) .... .... } ?? Regards, Martin
Or something along the lines of:
Suggests: RGtk2
f <- function (x, ...)
{
stopifnot("package:RGtk2" %in% search() ||
require("RGtk2", quietly = TRUE))
# do Rgtk2 stuff here
}
Jeff
On Thu, Oct 30, 2008 at 9:15 AM, Martin Maechler
<maechler at stat.math.ethz.ch> wrote:>>>>>> "FA" == Felix Andrews <felix at
nfrac.org>
>>>>>> on Thu, 30 Oct 2008 17:40:17 +1100 writes:
>
> FA> Dear R-devel,
> FA> I have a problem defining the dependencies for a package.
>
> FA> My package (latticist, not yet released) "Suggests"
RGtk2, but
> FA> specifically does not require it. If RGtk2 is available, the user
can
> FA> call a function that builds a GUI with RGtk2. However, I do not
want
> FA> to attach the RGtk2 namespace, because it is irrelevant to the
user
> FA> and exports about 7500 symbols.
>
> FA> Last time I asked a similar question to this, Professor Ripley
noted
> FA> that the usual method to get around this situation is the use an
> FA> explicit package prefix to function calls (the `::` operator).
But
> FA> this is not so easy with non-standard functions. Take this chunk
of
> FA> code:
>
> FA> widg <- gtkComboBoxEntryNewText()
> FA> widg$show()
> FA> widg["width-request"] <- 100
>
> FA> The first call is easy to prefix, as
RGtk2::gtkComboBoxEntryNewText()
> FA> but the others, `$.RGtkObject` and `[<-.RGtkObject` are not.
>
> indeed.
>
> FA> While I *could* rewrite all the code to use explicit functions, I
> FA> think, the resulting code would be much less clear.
>
> FA> Essentially what I want to do is conditionally import the RGtk2
namespace.
> FA> Any suggestions?
>
> Maybe something along the line of
>
> if(is.function(try(RGtk2::gtkComboBoxEntryNewText))) {
> library(RGtk2)
> ....
> ....
> }
>
> ??
>
> Regards,
> Martin
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
Jeffrey Ryan
jeffrey.ryan at insightalgo.com
ia: insight algorithmics
www.insightalgo.com