From mtmorgan at fhcrc.org  Fri Dec 23 23:11:43 2011
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Fri, 23 Dec 2011 14:11:43 -0800
Subject: [Rd] Debugging namespace problems
In-Reply-To: <CABdHhvEoBaXV9Q-J5yrA1LS=93DX40u-iMSthnyZ65G7KPKe=g@mail.gmail.com>
References: <CABdHhvFG-3g5UFps-sn_wvaK_HKgeyhY1=8WNQ84H5sYVvL1ww@mail.gmail.com>	<CABdHhvHr90tFo15yEWpVaw-XEpc0=SJ9NOAESN99LmK36D4t8Q@mail.gmail.com>
	<CABdHhvEoBaXV9Q-J5yrA1LS=93DX40u-iMSthnyZ65G7KPKe=g@mail.gmail.com>
Message-ID: <4EF4FC9F.2020106@fhcrc.org>

On 12/23/2011 11:54 AM, Hadley Wickham wrote:
> And one last note: I'm reasonably certain I haven't forgotten to
> export an S3 method because I wrote the following script to (crudely)
> compare the function definitions in ggplot2 with its namespace:
>
>    ns<- parseNamespaceFile("ggplot", "~/Documents/ggplot/")
>
>    s3e<- paste(ns$S3methods[, 1], ns$S3methods[, 2], sep = ".")
>
>    f<- ls("package:ggplot2")
>    s3<- f[str_detect(f, fixed("."))]
>
>    missing<- setdiff(s3, s3e)
>    missing[!str_detect(missing, "bolus|icon")]
>
> (Code isn't reproducible, but should give you the basic idea)

I think it's this line

         if (!exists(scale_name, globalenv()))
             next


in scales_add_defaults, where the symbol isn't found in the globalenv() 
when nstest is attached and ggplot2 only loaded, but is (via the search 
path) when ggplot2 is attached.

Martin


>
> Hadley
>
>
> On Fri, Dec 23, 2011 at 1:52 PM, Hadley Wickham<hadley at rice.edu>  wrote:
>> I should add that I'm pretty sure this is something wrong with the
>> ggplot2 NAMESPACE because if I explicitly attach ggplot2 the code
>> works:
>>
>>> library(nstest)
>>> my_plot()
>> Error in UseMethod("scale_dimension") :
>>   no applicable method for 'scale_dimension' applied to an object of
>> class "NULL"
>>> library(ggplot2)
>>> my_plot()
>> # Plot appears.
>>
>> Hadley
>>
>> On Fri, Dec 23, 2011 at 1:50 PM, Hadley Wickham<hadley at rice.edu>  wrote:
>>> Hi all,
>>>
>>> I frequently find that I've failed to export something in my NAMESPACE
>>> and hence my package doesn't work when it's imported into another
>>> package. Does anyone have suggestion for debugging this type of
>>> problem?  R CMD check passes without any ns related errors on both the
>>> importee and the importer.
>>>
>>> I've attached a reproducible example - if you install the development
>>> version of ggplot2 (e.g. with devtools::install_github("ggplot2") the
>>> attached package fails R CMD check with:
>>>
>>>> ### ** Examples
>>>>
>>>> plot(my_plot())
>>> Error in structure(list(data = data, layers = list(), scales = Scales$new(),  :
>>>   attempt to apply non-function
>>> Calls: plot ... my_plot ->  ggplot ->  ggplot.data.frame ->  structure
>>> Execution halted
>>> Error: Command failed (1)
>>>
>>> Hadley
>>>
>>> --
>>> Assistant Professor / Dobelman Family Junior Chair
>>> Department of Statistics / Rice University
>>> http://had.co.nz/
>>
>>
>>
>> --
>> Assistant Professor / Dobelman Family Junior Chair
>> Department of Statistics / Rice University
>> http://had.co.nz/
>
>
>


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793



[Rd] Debugging namespace problems
Martin Morgan