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 Maechlerwrote: > > 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?
Thank you for this info and the suggestion! David On Tue, 14 Mar 2017 at 09:06, Martin Maechlerwrote: > > 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