Re: [R-pkg-devel] Extending an S3 method, but putting the package in Suggests?

2017-03-14 Thread David Hugh-Jones
Hi Martin,

Thanks. I figured that out after trying it myself, so I didn't do that.
OTOH, a whole new package just so I can extend a method... I feel that life
is too short. So, I cut the Gordian knot and just wrote as_FlexTable
instead of as.FlexTable, and skipped the whole inheritance issue.

Cheers,

David


On 14 March 2017 at 16:35, Martin Maechler 
wrote:

> > David Hugh-Jones 
> > on Tue, 14 Mar 2017 09:26:49 + writes:
>
> > Just out of interest, what would happen if I used the hacky solution
> of
> > simply  exporting my own method like:
>
> > as.FlexTable <- function(x, ...) UseMethod("as.FlexTable")
>
> > I am fairly sure you will tell me that fire and brimstone will rain
> down…
> > But it sure seems simple  compared to writing another package and
> getting
> > it on CRAN...
>
> no fire etc, but pretty close ;-)
>
> You will have two (internal) methods tables for as.FlexTable,
> one in ReporteRs, one in your package, and from a user point of
> view there's a deep abyss in functionality between working with
>
>   require(ReporteRs); require(huxtable)
>
> and working with
>
>   require(huxtable); require(ReporteRs)
>
> This is undesirable and error prone and can be resolved by
> correct imports as those mentioned.
>
> Martin
>
> > David
>
> > On Tue, 14 Mar 2017 at 09:06, Martin Maechler <
> maech...@stat.math.ethz.ch>
> > wrote:
>
> >> > David Hugh-Jones 
> >> > on Tue, 14 Mar 2017 02:46:35 + writes:
> >> > David Hugh-Jones 
> >> > on Tue, 14 Mar 2017 02:46:35 + writes:
> >>
> >> > Hi,
> >> > Cross-posted from SO:
> >> >
> >> http://stackoverflow.com/questions/42776058/extending-
> an-s3-generic-from-an-optional-package
> >>
> >> ((sent my answer there as well))
> >>
> >> > I have a package which provides an as.FlexTable method for its
> >> objects,
> >> > extending the S3 generic from the ReporteRs package. So, my
> >> NAMESPACE file,
> >> > generated by roxygen, has lines:
> >>
> >> > importFrom(ReporteRs,as.FlexTable)
> >> > ...
> >> > S3method(as.FlexTable,huxtable)
> >> > ...
> >> > export(as.FlexTable)
> >>
> >> > I don't much want to put ReporteRs in Imports: in the DESCRIPTION
> >> file,
> >> > because it involves a big external dependency on Java. But, when I
> >> put it
> >> > into Suggests:, R CMD check gives me errors like "Namespace
> >> dependency not
> >> > required".
> >>
> >> > Is there anyway I can extend the generic without making a hard
> >> dependency?
> >>
> >> No.  Importing is a hard dependency..
> >> Some people do not import formally but use  '::'
> >> instead, *and* conditionalize their code on the availability of
> >> that namespace.
> >> I don't recommend that at all, and particularly not for
> >> extending a generic.
> >>
> >> I recommend you talk with the maintainer of 'ReporteRs':
> >> 1) You could use a common (yet-to-create) very small package say
> >> 'flexS3generics'
> >> which provides S3 generics (and S4 if ..) you want to use
> >> both, and then both you and her/him import from that mini package.
> >> You'd be both authors of that package.
> >>
> >> 2) If your package is much smaller (in its footprint, incl
> >> dependencies) than 'ReporteRs' she/he may agree to import the
> >> S3 generic from your package instead of the other way around.
> >>
> >> Both are clean solutions,
> >> and both need some time-coordination when releasing to CRAN,
> >> '1)' being easier: Once the 'flexS3generics' is released to
> >> CRAN, change (both) your package(s) to
> >> importFrom(flexS3generics,*) but these changes and CRAN
> >> submissions are then independent of each other.
> >>
> >>
> >> > Cheers,
> >> > David
> >>
> >> --
> > Sent from Gmail Mobile
>
> > [[alternative HTML version deleted]]
>
>

[[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] Extending an S3 method, but putting the package in Suggests?

2017-03-14 Thread Martin Maechler
> David Hugh-Jones 
> on Tue, 14 Mar 2017 09:26:49 + writes:

> Just out of interest, what would happen if I used the hacky solution of
> simply  exporting my own method like:

> as.FlexTable <- function(x, ...) UseMethod("as.FlexTable")

> I am fairly sure you will tell me that fire and brimstone will rain down…
> But it sure seems simple  compared to writing another package and getting
> it on CRAN...

no fire etc, but pretty close ;-)

You will have two (internal) methods tables for as.FlexTable,
one in ReporteRs, one in your package, and from a user point of
view there's a deep abyss in functionality between working with

  require(ReporteRs); require(huxtable)

and working with

  require(huxtable); require(ReporteRs)

This is undesirable and error prone and can be resolved by
correct imports as those mentioned.

Martin

> David

> On Tue, 14 Mar 2017 at 09:06, Martin Maechler 
> wrote:

>> > David Hugh-Jones 
>> > on Tue, 14 Mar 2017 02:46:35 + writes:
>> > David Hugh-Jones 
>> > on Tue, 14 Mar 2017 02:46:35 + writes:
>> 
>> > Hi,
>> > Cross-posted from SO:
>> >
>> 
http://stackoverflow.com/questions/42776058/extending-an-s3-generic-from-an-optional-package
>> 
>> ((sent my answer there as well))
>> 
>> > I have a package which provides an as.FlexTable method for its
>> objects,
>> > extending the S3 generic from the ReporteRs package. So, my
>> NAMESPACE file,
>> > generated by roxygen, has lines:
>> 
>> > importFrom(ReporteRs,as.FlexTable)
>> > ...
>> > S3method(as.FlexTable,huxtable)
>> > ...
>> > export(as.FlexTable)
>> 
>> > I don't much want to put ReporteRs in Imports: in the DESCRIPTION
>> file,
>> > because it involves a big external dependency on Java. But, when I
>> put it
>> > into Suggests:, R CMD check gives me errors like "Namespace
>> dependency not
>> > required".
>> 
>> > Is there anyway I can extend the generic without making a hard
>> dependency?
>> 
>> No.  Importing is a hard dependency..
>> Some people do not import formally but use  '::'
>> instead, *and* conditionalize their code on the availability of
>> that namespace.
>> I don't recommend that at all, and particularly not for
>> extending a generic.
>> 
>> I recommend you talk with the maintainer of 'ReporteRs':
>> 1) You could use a common (yet-to-create) very small package say
>> 'flexS3generics'
>> which provides S3 generics (and S4 if ..) you want to use
>> both, and then both you and her/him import from that mini package.
>> You'd be both authors of that package.
>> 
>> 2) If your package is much smaller (in its footprint, incl
>> dependencies) than 'ReporteRs' she/he may agree to import the
>> S3 generic from your package instead of the other way around.
>> 
>> Both are clean solutions,
>> and both need some time-coordination when releasing to CRAN,
>> '1)' being easier: Once the 'flexS3generics' is released to
>> CRAN, change (both) your package(s) to
>> importFrom(flexS3generics,*) but these changes and CRAN
>> submissions are then independent of each other.
>> 
>> 
>> > Cheers,
>> > David
>> 
>> --
> Sent from Gmail Mobile

> [[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] Extending an S3 method, but putting the package in Suggests?

2017-03-14 Thread David Hugh-Jones
Thank you for this info and the suggestion!
David

On Tue, 14 Mar 2017 at 09:06, Martin Maechler 
wrote:

> > David Hugh-Jones 
> > on Tue, 14 Mar 2017 02:46:35 + writes:
> > David Hugh-Jones 
> > on Tue, 14 Mar 2017 02:46:35 + writes:
>
> > Hi,
> > Cross-posted from SO:
> >
> http://stackoverflow.com/questions/42776058/extending-an-s3-generic-from-an-optional-package
>
>   ((sent my answer there as well))
>
> > I have a package which provides an as.FlexTable method for its
> objects,
> > extending the S3 generic from the ReporteRs package. So, my
> NAMESPACE file,
> > generated by roxygen, has lines:
>
> > importFrom(ReporteRs,as.FlexTable)
> > ...
> > S3method(as.FlexTable,huxtable)
> > ...
> > export(as.FlexTable)
>
> > I don't much want to put ReporteRs in Imports: in the DESCRIPTION
> file,
> > because it involves a big external dependency on Java. But, when I
> put it
> > into Suggests:, R CMD check gives me errors like "Namespace
> dependency not
> > required".
>
> > Is there anyway I can extend the generic without making a hard
> dependency?
>
> No.  Importing is a hard dependency..
> Some people do not import formally but use  '::'
> instead, *and* conditionalize their code on the availability of
> that namespace.
> I don't recommend that at all, and particularly not for
> extending a generic.
>
> I recommend you talk with the maintainer of 'ReporteRs':
> 1) You could use a common (yet-to-create) very small package say
> 'flexS3generics'
>which provides S3 generics (and S4 if ..) you want to use
>both, and then both you and her/him import from that mini package.
>You'd be both authors of that package.
>
> 2) If your package is much smaller (in its footprint, incl
>dependencies) than 'ReporteRs' she/he may agree to import the
>S3 generic from your package instead of the other way around.
>
> Both are clean solutions,
> and both need some time-coordination when releasing to CRAN,
> '1)' being easier: Once the 'flexS3generics' is released to
> CRAN, change (both) your package(s) to
> importFrom(flexS3generics,*) but these changes and CRAN
> submissions are then independent of each other.
>
>
> > Cheers,
> > David
>
> --
Sent from Gmail Mobile

[[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] Extending an S3 method, but putting the package in Suggests?

2017-03-14 Thread Martin Maechler
> David Hugh-Jones 
> on Tue, 14 Mar 2017 02:46:35 + writes:
> David Hugh-Jones 
> on Tue, 14 Mar 2017 02:46:35 + writes:

> Hi,
> Cross-posted from SO:
> 
http://stackoverflow.com/questions/42776058/extending-an-s3-generic-from-an-optional-package

  ((sent my answer there as well))

> I have a package which provides an as.FlexTable method for its objects,
> extending the S3 generic from the ReporteRs package. So, my NAMESPACE 
file,
> generated by roxygen, has lines:

> importFrom(ReporteRs,as.FlexTable)
> ...
> S3method(as.FlexTable,huxtable)
> ...
> export(as.FlexTable)

> I don't much want to put ReporteRs in Imports: in the DESCRIPTION file,
> because it involves a big external dependency on Java. But, when I put it
> into Suggests:, R CMD check gives me errors like "Namespace dependency not
> required".

> Is there anyway I can extend the generic without making a hard dependency?

No.  Importing is a hard dependency..
Some people do not import formally but use  '::'
instead, *and* conditionalize their code on the availability of
that namespace.
I don't recommend that at all, and particularly not for
extending a generic.

I recommend you talk with the maintainer of 'ReporteRs':
1) You could use a common (yet-to-create) very small package say 
'flexS3generics'
   which provides S3 generics (and S4 if ..) you want to use
   both, and then both you and her/him import from that mini package.
   You'd be both authors of that package.

2) If your package is much smaller (in its footprint, incl
   dependencies) than 'ReporteRs' she/he may agree to import the
   S3 generic from your package instead of the other way around.

Both are clean solutions,
and both need some time-coordination when releasing to CRAN,
'1)' being easier: Once the 'flexS3generics' is released to
CRAN, change (both) your package(s) to
importFrom(flexS3generics,*) but these changes and CRAN
submissions are then independent of each other.


> Cheers,
> David

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