Skip to content

[R-pkg-devel] r-patched error

4 messages · Duncan Murdoch, David Hugh-Jones

#
Hi all,

Latest release of my package has an error when checked on r-patched-linux
and r-devel-linux. Relevant output is shown below (from
https://cran.r-project.org/web/checks/check_results_huxtable.html). It
suggests that there's no method for `align<-` and `bold` for huxtable
objects. In fact the package defines and exports such methods. Selected
lines from the NAMESPACE file:

S3method("align<-",huxtable)
S3method(bold,huxtable)
export("align<-")
export("align<-.huxtable")
export(bold)
export(bold.huxtable)

Checks are passing fine on other platforms. Is this just a weirdness to do
with the changes in R 3.5.0 on Linux? Or does it indicate a real problem?

Cheers,
David

    > ### ** Examples
    >
    >
    > ht <- huxtable(a = 1:3, b = 1:3)
    > align(ht) <- 'right'
    Error in UseMethod("align<-") :
     no applicable method for 'align<-' applied to an object of class
"c('huxtable', 'data.frame')"
    Calls: align<-
    Execution halted
Flavor: r-patched-linux-x86_64
<https://www.r-project.org/nosvn/R.check/r-patched-linux-x86_64/huxtable-00check.html>

Version: 4.0.0
Check: re-building of vignette outputs
Result: WARN
    Error in re-building vignettes:
     ...
    Quitting from lines 52-104 (design-principles.Rmd)
    Error: processing vignette ?design-principles.Rmd? failed with
diagnostics:
    no applicable method for ?bold? applied to an object of class
"c('huxtable', 'data.frame')"
    Execution halted
Flavor: r-patched-linux-x86_64
<https://www.r-project.org/nosvn/R.check/r-patched-linux-x86_64/huxtable-00check.html>
David
#
On 04/06/2018 7:34 AM, David Hugh-Jones wrote:
I'd worry a little bit about your "make_getter_setters" function:  it 
saves the result using

   lapply(names(funs), function (x) {
     assign(x, funs[[x]], envir = parent.frame(3)) # 3: 1 for 
function(x), 2 for lapply, 3 for the caller!
   })

That count of 3 looks like an implementation detail that could 
conceivably vary, for instance if the compiler decided to optimize out a 
call or two, or lapply's implementation changed.  (I suspect this isn't 
the cause of the error you saw, or you would have seen it a lot more: 
but I'd still fix it.)

I think a safer way to find the huxtable namespace is something like

huxtableNamespace <- .getNamespace("huxtable")

though this is advised against; a documented but less obvious way to do 
it would be

huxtableNamespace <- environment(huxtable)

The "huxtable" on the right is the function; most other functions in 
your package would also be fine, as long as you haven't done anything 
tricky to change their environments.

With one of those definitions, you could change your lapply() to

   lapply(names(funs), function (x) {
     assign(x, funs[[x]], envir = huxtableNamespace)
   })

 > Checks are passing fine on other platforms. Is this just a weirdness 
to do
 > with the changes in R 3.5.0 on Linux? Or does it indicate a real problem?

A possibility is memory corruption at the C level.  Since you don't have 
any C code in huxtable that couldn't be caused by what you did, but you 
might still be a victim of it.

Duncan Murdoch
#
Thank you very much for this thoughtful advice! I am guessing that
getNamespace("huxtable") would be another more self-documenting way to do
this. I will make the change.

David


On Mon, 4 Jun 2018 at 13:26, Duncan Murdoch <murdoch.duncan at gmail.com>
wrote:

  
  
#
On 04/06/2018 8:56 AM, David Hugh-Jones wrote:
Yes!  I didn't see that one.

Duncan Murdoch