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