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)
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.
[working version] On 9/25/2021 2:55 AM, Leonard Mada 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()### [updated] # Basic Info: info.pkg = function(pkg=NULL, fields="Repository") { ??? if(is.null(pkg)) { pkg = installed.packages(fields=fields); } ??? 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", fields, "Imports")]; ??? return(p); } I will think later how to improve the filtering of Bioconductor packages. Probably based on biocViews. Many thanks, Leonard> > > 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) >