[R-pkg-devel] Weird error on CRAN linux check

Duncan Murdoch murdoch@dunc@n @ending from gm@il@com
Thu Jul 5 13:19:58 CEST 2018


On 05/07/2018 5:22 AM, David Hugh-Jones wrote:
> 
> Wow, this is extremely helpful. I've applied Joris' patch. By the way, 
> the github master has the change that I stopped exporting methods, as 
> per Hadley's suggestion; this caused *all* functions created via 
> make_getter_setters to fail. Version 4.0.1 on CRAN has the methods 
> exported, which was masking the error in most cases. I don't know why 
> bold() was failing in certain cases only... in any case, the patch seems 
> to fix things.
> 

That's a roxygen2 bug or misuse.  If you use the code below without the 
roxygen2 processing, and manually build the NAMESPACE file as

export(foo)
S3method(foo, bar)

then things are fine.  I don't know roxygen2 well enough to know what 
else you should have done to get your NAMESPACE file to look like that.

Duncan Murdoch


> Here is a brief test case that shows the original problem. I don't know 
> whether this reveals any problem in base R:
> 
> # in package mypackage:
> #' @export
> foo <- function (x, ...) UseMethod('foo')
> make_a_method <- function () assign("foo.bar", function (x, ...) cat("In 
> foo.bar"), pos = getNamespace('mypackage'))
> make_a_method()
> 
> # in the console:
> library(mypackage)
> mypackage:::foo.bar
> ## function (x, ...) cat("In foo.bar")
> ## <bytecode: 0x109a0ab80>
> ## <environment: 0x109a0ba28>
> x <- structure(1, class='bar')
> foo(x)
> ## Error in UseMethod("foo") :
> ##  no applicable method for 'foo' applied to an object of class "bar"
> 
> Also, I know I shouldn't be using @s3method ... it's on the TODO list... !
> 
> Cheers,
> David
> 
> 
> On Thu, 5 Jul 2018 at 09:07, Iñaki Úcar <i.ucar86 using gmail.com 
> <mailto:i.ucar86 using gmail.com>> wrote:
> 
>     El mié., 4 jul. 2018 a las 22:47, Duncan Murdoch
>     (<murdoch.duncan using gmail.com <mailto:murdoch.duncan using gmail.com>>) escribió:
>      >
>      > On 04/07/2018 4:04 PM, Joris Meys wrote:
>      > >
>      > >
>      > > On Wed, Jul 4, 2018 at 9:31 PM, Duncan Murdoch
>     <murdoch.duncan using gmail.com <mailto:murdoch.duncan using gmail.com>
>      > > <mailto:murdoch.duncan using gmail.com
>     <mailto:murdoch.duncan using gmail.com>>> wrote:
>      > >
>      > >
>      > >     That shouldn't matter.  That function was created in a local
>      > >     environment whose parent is <environment: namespace:huxtable>
>      > >     (probably by the huxtable:::make_setter_getters function, but I
>      > >     didn't check).
>      > >
>      > >     Duncan Murdoch
>      > >
>      > > I would think it does matter. Methods are found on the search
>     path, but
>      > > the environment where the methods are defined is not on the
>     search path.
>      > > It's a child environment of the namespace, and hence cannot be
>     reached
>      > > from either the global environment or the namespace if I
>     understood it
>      > > correctly.
>      > >
>      >
>      > The environment of a function is where it looks for objects, not
>     where
>      > it is stored.  That method is stored in the huxtable namespace, and
>      > exported from it.  That's why
>      > getFromNamespace("align.huxtable","huxtable") (or even
>      > huxtable::align.huxtable) finds it.
>      >
>      > I don't know the source of the original error.
> 
>     I don't know either. But obviously it has something to do with the
>     function environment and how UseMethod looks for methods when they are
>     exported from a namespace (I tested a similar "layout" in the global
>     environment and the method is correctly found). So maybe this thread
>     belongs to r-devel instead.
> 
>     Iñaki
> 
>      >
>      > Duncan Murdoch
>      >
> 
>     ______________________________________________
>     R-package-devel using r-project.org <mailto:R-package-devel using r-project.org>
>     mailing list
>     https://stat.ethz.ch/mailman/listinfo/r-package-devel
>



More information about the R-package-devel mailing list