package structure
1
0
Entering edit mode
@robert-m-flight-4158
Last seen 8 weeks ago
United States
Hi All, I'm looking for some advice on package structure and dependencies. I'm working on a package that allows for different types of meta-analyses between different datasets. As part of the original development leading up to creating a package, I also generated a series of functions that do a lot of work to generate navigable results using HTML imagemaps. However, the visualizations depend currently on Rgraphviz (layouts) and Cairo (PNG figure generation). The results can be summarized in different ways than the visualizations I have developed (potentially using Cytoscape, or just as a table), and I want to make the package as easy to install and use as possible. Therefore, if I can make the analysis package not require Rgraphviz and Cairo, I think that would be good. Would it be advisable to create a second package containing the functions necessary for creating the visualizations? Otherwise I introduce dependencies that may not even be used by the users of the package. And I don't know of any other proper way (i.e. besides "require", which I believe is to be avoided in packages) to call other packages than having them in the DESCRIPTION and NAMESPACE files, and I believe anything in NAMESPACE requires that the package be installed. I would appreciate others thoughts on this. Thanks, -Robert Robert M. Flight, Ph.D. University of Louisville Bioinformatics Laboratory University of Louisville Louisville, KY PH 502-852-1809 (HSC) PH 502-852-0467 (Belknap) EM robert.flight at louisville.edu EM rflight79 at gmail.com Williams and Holland's Law: ? ? ?? If enough data is collected, anything may be proven by statistical methods.
Rgraphviz Rgraphviz • 1.0k views
ADD COMMENT
0
Entering edit mode
@valerie-obenchain-4275
Last seen 2.7 years ago
United States
Hi Robert, I don't think you need to create two packages. You can put Rgraphviz and Cairo in the Suggests field of your package DESCRIPTION file. Using the .onLoad function in a zzz.R file you can include a check if the user has the packages loaded and set a global varaiable. The global variable can be used to dictate if code dependent on Rgarphviz and Ciaro is run. For example, In a zzz.R file, define a global variable .options <- new.env(parent = emptyenv()) Use the .onLoad function to set the global variable, .onLoad <- function(...) { .options[["foo.available"]] <- require(foo, quietly = TRUE) } In your package code, check the value of the global variable to execute code dependent on the graph packages, if(.options[["foo.available"]]) do something ... else do something else .... Valerie On 02/25/2011 12:15 PM, Robert M. Flight wrote: > Hi All, > > I'm looking for some advice on package structure and dependencies. > > I'm working on a package that allows for different types of > meta-analyses between different datasets. As part of the original > development leading up to creating a package, I also generated a > series of functions that do a lot of work to generate navigable > results using HTML imagemaps. > > However, the visualizations depend currently on Rgraphviz (layouts) > and Cairo (PNG figure generation). The results can be summarized in > different ways than the visualizations I have developed (potentially > using Cytoscape, or just as a table), and I want to make the package > as easy to install and use as possible. Therefore, if I can make the > analysis package not require Rgraphviz and Cairo, I think that would > be good. > > Would it be advisable to create a second package containing the > functions necessary for creating the visualizations? Otherwise I > introduce dependencies that may not even be used by the users of the > package. And I don't know of any other proper way (i.e. besides > "require", which I believe is to be avoided in packages) to call other > packages than having them in the DESCRIPTION and NAMESPACE files, and > I believe anything in NAMESPACE requires that the package be > installed. > > I would appreciate others thoughts on this. > > Thanks, > > -Robert > > Robert M. Flight, Ph.D. > University of Louisville Bioinformatics Laboratory > University of Louisville > Louisville, KY > > PH 502-852-1809 (HSC) > PH 502-852-0467 (Belknap) > EM robert.flight@louisville.edu > EM rflight79@gmail.com > > Williams and Holland's Law: > If enough data is collected, anything may be proven by > statistical methods. > > _______________________________________________ > Bioconductor mailing list > Bioconductor@r-project.org > https://stat.ethz.ch/mailman/listinfo/bioconductor > Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor > [[alternative HTML version deleted]]
ADD COMMENT
0
Entering edit mode
In addition to Valerie's suggestions, you might consider an interesting approach to dynamic response to package loading in the oligoClasses/oligo stack. The packageEvent and setHook functions of base R are used quite effectively there -- see oligoClasses/R/zzz.R On Fri, Feb 25, 2011 at 5:43 PM, Valerie Obenchain <vobencha at="" fhcrc.org=""> wrote: > Hi Robert, > > I don't think you need to create two packages. You can put Rgraphviz and > Cairo in the Suggests field of your package DESCRIPTION file. > Using the .onLoad function in a zzz.R file you can include a check if > the user has the packages loaded and set a global varaiable. > The global variable can be used to dictate if code dependent on > Rgarphviz and Ciaro is run. > > For example, > > In a zzz.R file, define a global variable > > ? ?.options <- new.env(parent = emptyenv()) > > Use the .onLoad function to set the global variable, > > ? ?.onLoad <- function(...) { > ? ? ? ?.options[["foo.available"]] <- require(foo, quietly = TRUE) > ? ?} > > In your package code, check the value of the global variable to execute > code dependent on the graph packages, > > if(.options[["foo.available"]]) do something ... else do something else .... > > > Valerie > > > > On 02/25/2011 12:15 PM, Robert M. Flight wrote: >> Hi All, >> >> I'm looking for some advice on package structure and dependencies. >> >> I'm working on a package that allows for different types of >> meta-analyses between different datasets. As part of the original >> development leading up to creating a package, I also generated a >> series of functions that do a lot of work to generate navigable >> results using HTML imagemaps. >> >> However, the visualizations depend currently on Rgraphviz (layouts) >> and Cairo (PNG figure generation). The results can be summarized in >> different ways than the visualizations I have developed (potentially >> using Cytoscape, or just as a table), and I want to make the package >> as easy to install and use as possible. Therefore, if I can make the >> analysis package not require Rgraphviz and Cairo, I think that would >> be good. >> >> Would it be advisable to create a second package containing the >> functions necessary for creating the visualizations? Otherwise I >> introduce dependencies that may not even be used by the users of the >> package. And I don't know of any other proper way (i.e. besides >> "require", which I believe is to be avoided in packages) to call other >> packages than having them in the DESCRIPTION and NAMESPACE files, and >> I believe anything in NAMESPACE requires that the package be >> installed. >> >> I would appreciate others thoughts on this. >> >> Thanks, >> >> -Robert >> >> Robert M. Flight, Ph.D. >> University of Louisville Bioinformatics Laboratory >> University of Louisville >> Louisville, KY >> >> PH 502-852-1809 (HSC) >> PH 502-852-0467 (Belknap) >> EM robert.flight at louisville.edu >> EM rflight79 at gmail.com >> >> Williams and Holland's Law: >> ? ? ? ?If enough data is collected, anything may be proven by >> statistical methods. >> >> _______________________________________________ >> Bioconductor mailing list >> Bioconductor at r-project.org >> https://stat.ethz.ch/mailman/listinfo/bioconductor >> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor >> > > > ? ? ? ?[[alternative HTML version deleted]] > > _______________________________________________ > Bioconductor mailing list > Bioconductor at r-project.org > https://stat.ethz.ch/mailman/listinfo/bioconductor > Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor >
ADD REPLY
0
Entering edit mode
Thank you both very much for the suggestions, I'm sure one or the other will definitely help me solve this. This should definitely make the overall package development easier. -Robert On Fri, Feb 25, 2011 at 20:26, Vincent Carey <stvjc at="" channing.harvard.edu=""> wrote: > In addition to Valerie's suggestions, you might consider an > interesting approach to dynamic response to package loading in the > oligoClasses/oligo stack. ?The packageEvent and setHook functions of > base R are used quite effectively there -- see oligoClasses/R/zzz.R > > On Fri, Feb 25, 2011 at 5:43 PM, Valerie Obenchain <vobencha at="" fhcrc.org=""> wrote: >> Hi Robert, >> >> I don't think you need to create two packages. You can put Rgraphviz and >> Cairo in the Suggests field of your package DESCRIPTION file. >> Using the .onLoad function in a zzz.R file you can include a check if >> the user has the packages loaded and set a global varaiable. >> The global variable can be used to dictate if code dependent on >> Rgarphviz and Ciaro is run. >> >> For example, >> >> In a zzz.R file, define a global variable >> >> ? ?.options <- new.env(parent = emptyenv()) >> >> Use the .onLoad function to set the global variable, >> >> ? ?.onLoad <- function(...) { >> ? ? ? ?.options[["foo.available"]] <- require(foo, quietly = TRUE) >> ? ?} >> >> In your package code, check the value of the global variable to execute >> code dependent on the graph packages, >> >> if(.options[["foo.available"]]) do something ... else do something else .... >> >> >> Valerie >> >> >> >> On 02/25/2011 12:15 PM, Robert M. Flight wrote: >>> Hi All, >>> >>> I'm looking for some advice on package structure and dependencies. >>> >>> I'm working on a package that allows for different types of >>> meta-analyses between different datasets. As part of the original >>> development leading up to creating a package, I also generated a >>> series of functions that do a lot of work to generate navigable >>> results using HTML imagemaps. >>> >>> However, the visualizations depend currently on Rgraphviz (layouts) >>> and Cairo (PNG figure generation). The results can be summarized in >>> different ways than the visualizations I have developed (potentially >>> using Cytoscape, or just as a table), and I want to make the package >>> as easy to install and use as possible. Therefore, if I can make the >>> analysis package not require Rgraphviz and Cairo, I think that would >>> be good. >>> >>> Would it be advisable to create a second package containing the >>> functions necessary for creating the visualizations? Otherwise I >>> introduce dependencies that may not even be used by the users of the >>> package. And I don't know of any other proper way (i.e. besides >>> "require", which I believe is to be avoided in packages) to call other >>> packages than having them in the DESCRIPTION and NAMESPACE files, and >>> I believe anything in NAMESPACE requires that the package be >>> installed. >>> >>> I would appreciate others thoughts on this. >>> >>> Thanks, >>> >>> -Robert >>> >>> Robert M. Flight, Ph.D. >>> University of Louisville Bioinformatics Laboratory >>> University of Louisville >>> Louisville, KY >>> >>> PH 502-852-1809 (HSC) >>> PH 502-852-0467 (Belknap) >>> EM robert.flight at louisville.edu >>> EM rflight79 at gmail.com >>> >>> Williams and Holland's Law: >>> ? ? ? ?If enough data is collected, anything may be proven by >>> statistical methods. >>> >>> _______________________________________________ >>> Bioconductor mailing list >>> Bioconductor at r-project.org >>> https://stat.ethz.ch/mailman/listinfo/bioconductor >>> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor >>> >> >> >> ? ? ? ?[[alternative HTML version deleted]] >> >> _______________________________________________ >> Bioconductor mailing list >> Bioconductor at r-project.org >> https://stat.ethz.ch/mailman/listinfo/bioconductor >> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor >> >
ADD REPLY

Login before adding your answer.

Traffic: 454 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6