r - 是一种检查包裹是否属于 Bioconductor 或 Cran 的方法吗?
问题描述
我想知道是否有一种很好的方法来检查属于 Bioconductor 的包(因为安装不同于 R CRAN 包。
例如,我想做这样的事情:
libraries <- c("ggplot2","BioBase")
check.libraries <- is.element(libraries, installed.packages()[, 1])==FALSE
libraries.to.install <- libraries[check.libraries]
if (length(libraries.to.install!=0)) {
install.packages(libraries.to.install)
}
success <- sapply(libraries,require, quietly = FALSE, character.only = TRUE)
if(length(success) != length(libraries)) {stop("A package failed to return a success in require() function.")}
这段代码检查是否安装了库(如果没有安装)。但是由于 Bioconductor Packages 以不同的方式安装,即: Biocmanager::install("Biobase") 我想做一个条件。我检查了 BiocCheck 但我认为它不起作用。
解决方案
不是最聪明的答案,但您可以一次准备所有包的详尽列表,然后将其写入 csv 以避免一次又一次地这样做。下载从这里获取的 BioConductor 包代码。
library(dplyr)
library(rvest)
CRANpackages <- available.packages() %>%
as.data.frame() %>%
select(Package) %>%
mutate(source = 'CRAN')
url <- 'https://www.bioconductor.org/packages/release/bioc/'
biocPackages <- url %>%
read_html() %>%
html_table() %>%
.[[1]] %>%
select(Package) %>%
mutate(source = 'BioConductor')
all_packages <- bind_rows(CRANpackages, biocPackages)
rownames(all_packages) <- NULL
write.csv(all_packages, 'All_packages.csv', row.names = FALSE)
现在,您可以过滤要从此数据框中检查的包 -
libraries <- c("ggplot2","Biobase")
result <- all_packages %>% filter(Package %in% libraries)
result
# Package source
#1 ggplot2 CRAN
#2 Biobase BioConductor
获取由 BioConductor 安装的包,这些包CRAN
可以result$Package[result$source == 'CRAN']
传递result$Package[result$source == 'BioConductor']
给它们各自的函数。
推荐阅读
- ruby - Capybara 使用 ID 时找不到 svg 元素
- directus - Directus 9,如何设置文件权限?
- shopify - Shopify Webhook 延迟
- python-3.x - Python 3 模块文档字符串中的块元素字符
- android - 是否有任何方法可以通过导航抽屉活动中的另一个片段来删除片段的所有数据?
- sql - 传递相同的函数但输出不同
- python - 我试图将最后一句话“else:print(“你没有名字吗?”)放在一个循环中,它会一直询问直到给出有效的答案
- android - 检查或收听 Wear os 设备是否在手腕上
- reactjs - reactjs中没有评论时如何显示消息?
- python - 给定pytorch中的idx列表,如何从数据集中获取一批样本?