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)
Installed packages: Bioconductor vs CRAN?
6 messages · Bert Gunter, Leonard Mada
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.
Dear Bert, Indeed, this seems to work: installed.packages(fields="Repository") I still need to figure out what variants to expect. Sincerely, Leonard
On 9/25/2021 3:31 AM, Leonard Mada wrote:
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.
[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)