The help file tells you that installed.packages() looks at the DESCRIPTION files of packages. Section 1.1.1 of "Writing R Extensions" tells you what information is in such files. Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Fri, Sep 24, 2021 at 4:56 PM Leonard Mada via R-help <r-help at r-project.org> wrote:> > Dear List Members, > > > Is there a way to extract if an installed package is from Bioconductor > or if it is a regular Cran package? > > > The information seems to be *not* available in: > > installed.packages() > > > Sincerely, > > > Leonard > > ======> > I started to write some utility functions to analyse installed packages. > The latest version is on Github: > https://github.com/discoleo/R/blob/master/Stat/Tools.CRAN.R > > > # Basic Info: > info.pkg = function(pkg=NULL) { > if(is.null(pkg)) { pkg = installed.packages(); } > else { > all.pkg = installed.packages(); > pkg = all.pkg[all.pkg[,1] %in% pkg, ]; > } > p = pkg; > p = as.data.frame(p); > p = p[ , c("Package", "Version", "Built", "Imports")]; > return(p); > } > # Imported packages: > imports.pkg = function(pkg=NULL, sort=TRUE) { > p = info.pkg(pkg); > ### Imported packages > imp = lapply(p$Imports, function(s) strsplit(s, "[,][ ]*")) > imp = unlist(imp) > imp = imp[ ! is.na(imp)] > # Cleanup: > imp = sub("[ \n\r\t]*+\\([-,. >=0-9\n\t\r]++\\) *+$", "", imp, > perl=TRUE) > imp = sub("^[ \n\r\t]++", "", imp, perl=TRUE); > # Tabulate: > tbl = as.data.frame(table(imp), stringsAsFactors=FALSE); > names(tbl)[1] = "Name"; > if(sort) { > id = order(tbl$Freq, decreasing=TRUE); > tbl = tbl[id,]; > } > return(tbl); > } > > match.imports = function(pkg, x=NULL, quote=FALSE) { > if(is.null(x)) x = info.pkg(); > if(quote) { > pkg = paste0("\\Q", pkg, "\\E"); > } > # TODO: Use word delimiters? > # "(<?=^|[ \n\r\t],)" > if(length(pkg) == 1) { > isImport = grepl(pkg, x$Imports); > return(x[isImport, ]); > } else { > # TODO: concept? > rez = lapply(pkg, function(p) x[grepl(p, x$Imports), ]); > return(rez); > } > } > > Examples: > > p = info.pkg(); > f = imports.pkg(); > > ### Analyze data > > # imported only once: (only in the locally installed packages) > f$Name[f$Freq == 1] > > match.imports("hunspell", p) > match.imports("labeling", p) > match.imports("rpart.plot", p) > > match.imports(c("pROC", "ROCR"), p) > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Oh, I should have added that packages can be on other repositories (local, github,...) and I think can be both in CRAN and BIOC . So your query would not seem to have a clear answer. AFAICS anyway. Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Fri, Sep 24, 2021 at 5:06 PM Bert Gunter <bgunter.4567 at gmail.com> wrote:> > The help file tells you that installed.packages() looks at the > DESCRIPTION files of packages. > Section 1.1.1 of "Writing R Extensions" tells you what information is > in such files. > > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along > and sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > On Fri, Sep 24, 2021 at 4:56 PM Leonard Mada via R-help > <r-help at r-project.org> wrote: > > > > Dear List Members, > > > > > > Is there a way to extract if an installed package is from Bioconductor > > or if it is a regular Cran package? > > > > > > The information seems to be *not* available in: > > > > installed.packages() > > > > > > Sincerely, > > > > > > Leonard > > > > ======> > > > I started to write some utility functions to analyse installed packages. > > The latest version is on Github: > > https://github.com/discoleo/R/blob/master/Stat/Tools.CRAN.R > > > > > > # Basic Info: > > info.pkg = function(pkg=NULL) { > > if(is.null(pkg)) { pkg = installed.packages(); } > > else { > > all.pkg = installed.packages(); > > pkg = all.pkg[all.pkg[,1] %in% pkg, ]; > > } > > p = pkg; > > p = as.data.frame(p); > > p = p[ , c("Package", "Version", "Built", "Imports")]; > > return(p); > > } > > # Imported packages: > > imports.pkg = function(pkg=NULL, sort=TRUE) { > > p = info.pkg(pkg); > > ### Imported packages > > imp = lapply(p$Imports, function(s) strsplit(s, "[,][ ]*")) > > imp = unlist(imp) > > imp = imp[ ! is.na(imp)] > > # Cleanup: > > imp = sub("[ \n\r\t]*+\\([-,. >=0-9\n\t\r]++\\) *+$", "", imp, > > perl=TRUE) > > imp = sub("^[ \n\r\t]++", "", imp, perl=TRUE); > > # Tabulate: > > tbl = as.data.frame(table(imp), stringsAsFactors=FALSE); > > names(tbl)[1] = "Name"; > > if(sort) { > > id = order(tbl$Freq, decreasing=TRUE); > > tbl = tbl[id,]; > > } > > return(tbl); > > } > > > > match.imports = function(pkg, x=NULL, quote=FALSE) { > > if(is.null(x)) x = info.pkg(); > > if(quote) { > > pkg = paste0("\\Q", pkg, "\\E"); > > } > > # TODO: Use word delimiters? > > # "(<?=^|[ \n\r\t],)" > > if(length(pkg) == 1) { > > isImport = grepl(pkg, x$Imports); > > return(x[isImport, ]); > > } else { > > # TODO: concept? > > rez = lapply(pkg, function(p) x[grepl(p, x$Imports), ]); > > return(rez); > > } > > } > > > > Examples: > > > > p = info.pkg(); > > f = imports.pkg(); > > > > ### Analyze data > > > > # imported only once: (only in the locally installed packages) > > f$Name[f$Freq == 1] > > > > match.imports("hunspell", p) > > match.imports("labeling", p) > > match.imports("rpart.plot", p) > > > > match.imports(c("pROC", "ROCR"), p) > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code.
Dear Bert, The DESCRIPTION file contains additional useful information, e.g.: 1.) Package EBImage: biocViews: Visualization Packaged: 2021-05-19 23:53:29 UTC; biocbuild 2.) deSolve Repository: CRAN I have verified a few of the CRAN packages, and they seem to include the tag: Repository: CRAN The Bioconductor packages are different (see e.g. EBImage). I am wondering if there is already a method to extract this info? Sincerely, Leonard On 9/25/2021 3:06 AM, Bert Gunter wrote:> The help file tells you that installed.packages() looks at the > DESCRIPTION files of packages. > Section 1.1.1 of "Writing R Extensions" tells you what information is > in such files. > > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along > and sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > On Fri, Sep 24, 2021 at 4:56 PM Leonard Mada via R-help > <r-help at r-project.org> wrote: >> Dear List Members, >> >> >> Is there a way to extract if an installed package is from Bioconductor >> or if it is a regular Cran package? >> >> >> The information seems to be *not* available in: >> >> installed.packages() >> >> >> Sincerely, >> >> >> Leonard >> >> ======>> >> I started to write some utility functions to analyse installed packages. >> The latest version is on Github: >> https://github.com/discoleo/R/blob/master/Stat/Tools.CRAN.R >> >> >> # Basic Info: >> info.pkg = function(pkg=NULL) { >> if(is.null(pkg)) { pkg = installed.packages(); } >> else { >> all.pkg = installed.packages(); >> pkg = all.pkg[all.pkg[,1] %in% pkg, ]; >> } >> p = pkg; >> p = as.data.frame(p); >> p = p[ , c("Package", "Version", "Built", "Imports")]; >> return(p); >> } >> # Imported packages: >> imports.pkg = function(pkg=NULL, sort=TRUE) { >> p = info.pkg(pkg); >> ### Imported packages >> imp = lapply(p$Imports, function(s) strsplit(s, "[,][ ]*")) >> imp = unlist(imp) >> imp = imp[ ! is.na(imp)] >> # Cleanup: >> imp = sub("[ \n\r\t]*+\\([-,. >=0-9\n\t\r]++\\) *+$", "", imp, >> perl=TRUE) >> imp = sub("^[ \n\r\t]++", "", imp, perl=TRUE); >> # Tabulate: >> tbl = as.data.frame(table(imp), stringsAsFactors=FALSE); >> names(tbl)[1] = "Name"; >> if(sort) { >> id = order(tbl$Freq, decreasing=TRUE); >> tbl = tbl[id,]; >> } >> return(tbl); >> } >> >> match.imports = function(pkg, x=NULL, quote=FALSE) { >> if(is.null(x)) x = info.pkg(); >> if(quote) { >> pkg = paste0("\\Q", pkg, "\\E"); >> } >> # TODO: Use word delimiters? >> # "(<?=^|[ \n\r\t],)" >> if(length(pkg) == 1) { >> isImport = grepl(pkg, x$Imports); >> return(x[isImport, ]); >> } else { >> # TODO: concept? >> rez = lapply(pkg, function(p) x[grepl(p, x$Imports), ]); >> return(rez); >> } >> } >> >> Examples: >> >> p = info.pkg(); >> f = imports.pkg(); >> >> ### Analyze data >> >> # imported only once: (only in the locally installed packages) >> f$Name[f$Freq == 1] >> >> match.imports("hunspell", p) >> match.imports("labeling", p) >> match.imports("rpart.plot", p) >> >> match.imports(c("pROC", "ROCR"), p) >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code.