Re: [R-pkg-devel] Extending an S3 method, but putting the package in Suggests?
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?
> 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?
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... 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?
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?
> 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
[R-pkg-devel] Extending an S3 method, but putting the package in Suggests?
Hi, Cross-posted from SO: http://stackoverflow.com/questions/42776058/extending-an-s3-generic-from-an-optional-package 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? Cheers, David [[alternative HTML version deleted]] __ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel