From jeff.a.ryan at gmail.com  Thu Oct 30 15:21:23 2008
From: jeff.a.ryan at gmail.com (Jeff Ryan)
Date: Thu, 30 Oct 2008 09:21:23 -0500
Subject: [Rd] conditionally import a namespace?
In-Reply-To: <18697.49514.201691.329789@stat.math.ethz.ch>
References: <94730b8a0810292340t7e328096u300e4a225e669c5d@mail.gmail.com>
	<18697.49514.201691.329789@stat.math.ethz.ch>
Message-ID: <e8e755250810300721o6edc1797wc48d4387e14ab0ed@mail.gmail.com>

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



[Rd] conditionally import a namespace?
Jeff Ryan