[R-pkg-devel] Dependency needs to be loaded manually even its specified in the package

Nuria Perez-Zanon nur|@@perez @end|ng |rom b@c@e@
Fri Sep 18 19:17:23 CEST 2020


Thanks Duncan for look at this. I will avoid to invent a new object system.

Best,

Núria

El 18/9/20 a las 19:13, Duncan Murdoch escribió:
>
> On 18/09/2020 12:38 p.m., Nuria Perez-Zanon wrote:
>> Dear all,
>>
>> I am maintaining a package call CSTools which is aimed for
>> post-processing climate simulations.
>>
>> The package is already published on CRAN with all dependencies correctly
>> state in DESCRIPTION, NAMESPACE and roxygen2 headers.
>>
>> However, when using one specific function which depends on 'qmap'
>> package, I should loaded both packages by executing:
>>
>>       library(CSTools)
>>       library(qmap)
>>
>> In case I don't load the second library, I get the error
>>
>> Error in doQmap(x = sample_cor, fobj = adjust, ...) :
>>     doQmap not defined for class(fobj) ==fitQmapQUANT
>>
>> Has anyone an idea for needing to manually load a dependency? I provide
>> a code below if someone wants to test it.
>>
>> Thanks in advace,
>>
>> Núria
>>
>> P.S.: Here is the code: library(CSTools) exp <- lonlat_data$exp
>> obs <- lonlat_data$obs
>> res <- CST_QuantileMapping(exp, obs)
>>
>>
>
> That's a design flaw in the doQmap function.  It looks like this:
>
> function (x, fobj, ...)
> {
>     cc <- class(fobj)
>     ffun <- substring(cc, 4, nchar(cc))
>     ffun <- paste("do", ffun, sep = "")
>     test <- sapply(ffun, exists, mode = "function")
>     if (all(test)) {
>         ffun <- match.fun(ffun)
>     }
>     else {
>         stop("doQmap not defined for class(fobj) ==", class(fobj))
>     }
>     ffun(x, fobj, ...)
> }
>
> There are at least a couple of errors there:
>
> - It appears to assume class(fobj) is a single element character 
> string.  This wouldn't have caused your problem, but it will probably 
> cause problems sometime..
>
> - It tries to do something like S3 methods dispatch without using S3, 
> by looking up "doQmapQUANT" in that line producing "test", but not 
> saying where to look for it.  You could probably fix this by adding 
> the envir argument to exists() in that call, e.g.
>
>   test <- sapply(ffun, exists, mode = "function", envir = 
> parent.env(environment()))
>
> but it would be better to not try to invent a new object system.
>
> Duncan Murdoch

http://bsc.es/disclaimer



More information about the R-package-devel mailing list