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

2020-09-18 Thread Nuria Perez-Zanon

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

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2020-09-18 Thread Duncan Murdoch

On 18/09/2020 12:52 p.m., Dirk Eddelbuettel wrote:


On 18 September 2020 at 18:38, Nuria Perez-Zanon wrote:
| I am maintaining a package call CSTools which is aimed for
| post-processing climate simulations.
[...]
|      library(CSTools)
|      library(qmap)

You never use library() in a package. Rather, you declare dependency
relationsships via DESCRIPTION (and likely NAMESPACE). See "Writing R
Extensions" for all the details.


I think you misread the post:  this was an example of code a user would 
run, not code from the package.


Duncan Murdoch

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2020-09-18 Thread Duncan Murdoch



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

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2020-09-18 Thread Nuria Perez-Zanon
Oh! Thanks, David. I was almost crazy. :D

I'll try it!

Best whishes,

Núria

El 18/9/20 a las 19:07, David Kepplinger escribió:
> Hi Núria,
>
> I've never used qmap, but looking at the source code it seems it's not 
> using S3 or S4 methods in `doQmap()` but is looking for the proper 
> method using `exists()`. Given that your package doesn't import the 
> required function, it's not found by `exists()` and the `doQmap()` 
> function complains.
>
> I think the only way around it is to declare the qmap package in the 
> Depends field, rather than the Imports field.
>
> Best,
> David
>
> On Fri, Sep 18, 2020 at 9:39 AM 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)
>
>
>
> http://bsc.es/disclaimer
>         [[alternative HTML version deleted]]
>
> __
> R-package-devel@r-project.org
>  mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>


http://bsc.es/disclaimer
[[alternative HTML version deleted]]

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2020-09-18 Thread Nuria Perez-Zanon
Thanks, Jost. I don't know where to set this S3method(print, foo) but I 
will look at this in  depth.

Best,

Núria

El 18/9/20 a las 18:57, Joshua Ulrich escribió:
> On Fri, Sep 18, 2020 at 11:56 AM Dirk Eddelbuettel  wrote:
>>
>> On 18 September 2020 at 18:38, Nuria Perez-Zanon wrote:
>> | I am maintaining a package call CSTools which is aimed for
>> | post-processing climate simulations.
>> [...]
>> |  library(CSTools)
>> |  library(qmap)
>>
>> You never use library() in a package. Rather, you declare dependency
>> relationsships via DESCRIPTION (and likely NAMESPACE). See "Writing R
>> Extensions" for all the details.
>>
> And here's the relevant section:
> https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Registering-S3-methods
>
> Best,
> Josh
>
>> Dirk
>>
>> --
>> https://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org
>>
>> __
>> R-package-devel@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>
>


http://bsc.es/disclaimer
[[alternative HTML version deleted]]

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2020-09-18 Thread David Kepplinger
Hi Núria,

I've never used qmap, but looking at the source code it seems it's not
using S3 or S4 methods in `doQmap()` but is looking for the proper method
using `exists()`. Given that your package doesn't import the required
function, it's not found by `exists()` and the `doQmap()` function
complains.

I think the only way around it is to declare the qmap package in the
Depends field, rather than the Imports field.

Best,
David

On Fri, Sep 18, 2020 at 9:39 AM 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)
>
>
>
> http://bsc.es/disclaimer
> [[alternative HTML version deleted]]
>
> __
> R-package-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>

[[alternative HTML version deleted]]

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2020-09-18 Thread Nuria Perez-Zanon
Hi Dirk,

Thanks for your comment. Maybe I haven't been enough clear. The package 
declares all the necessary dependencies correctly following the 
guidelines you provide. I am only able to detect the problem by running 
an example:

This works:

  library(CSTools)
      library(qmap)
  exp <- lonlat_data$exp
  obs <- lonlat_data$obs
  res <- CST_QuantileMapping(exp, obs)

This fails:
  library(CSTools)
  exp <- lonlat_data$exp
  obs <- lonlat_data$obs
  res <- CST_QuantileMapping(exp, obs)

The DESCRIPTION sets:
Imports:
qmap,

The function sets:
|#'@import qmap|  

The NAMESPACE sets:
|import(qmap) I guess I am missing something to check but I don't know 
what. Thanks for your help. Núria |

El 18/9/20 a las 18:52, Dirk Eddelbuettel escribió:
> On 18 September 2020 at 18:38, Nuria Perez-Zanon wrote:
> | I am maintaining a package call CSTools which is aimed for
> | post-processing climate simulations.
> [...]
> |      library(CSTools)
> |      library(qmap)
>
> You never use library() in a package. Rather, you declare dependency
> relationsships via DESCRIPTION (and likely NAMESPACE). See "Writing R
> Extensions" for all the details.
>
> Dirk
>


http://bsc.es/disclaimer
[[alternative HTML version deleted]]

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2020-09-18 Thread Joshua Ulrich
On Fri, Sep 18, 2020 at 11:56 AM Dirk Eddelbuettel  wrote:
>
>
> On 18 September 2020 at 18:38, Nuria Perez-Zanon wrote:
> | I am maintaining a package call CSTools which is aimed for
> | post-processing climate simulations.
> [...]
> |  library(CSTools)
> |  library(qmap)
>
> You never use library() in a package. Rather, you declare dependency
> relationsships via DESCRIPTION (and likely NAMESPACE). See "Writing R
> Extensions" for all the details.
>

And here's the relevant section:
https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Registering-S3-methods

Best,
Josh

>
> Dirk
>
> --
> https://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org
>
> __
> R-package-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



-- 
Joshua Ulrich  |  about.me/joshuaulrich
FOSS Trading  |  www.fosstrading.com

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2020-09-18 Thread Dirk Eddelbuettel


On 18 September 2020 at 18:38, Nuria Perez-Zanon wrote:
| I am maintaining a package call CSTools which is aimed for 
| post-processing climate simulations.
[...]
|      library(CSTools)
|      library(qmap)

You never use library() in a package. Rather, you declare dependency
relationsships via DESCRIPTION (and likely NAMESPACE). See "Writing R
Extensions" for all the details.

Dirk

-- 
https://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel