[R] Installed packages: Bioconductor vs CRAN?
Leonard Mada
|eo@m@d@ @end|ng |rom @yon|c@eu
Sat Sep 25 02:50:19 CEST 2021
[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)
>
More information about the R-help
mailing list