[Rd] conditionally import a namespace?
Martin Maechler
maechler at stat.math.ethz.ch
Thu Oct 30 15:15:06 CET 2008
>>>>> "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
More information about the R-devel
mailing list