[英]Is a way to check if a package belongs to Bioconductor or Cran?
我想知道是否有一種很好的方法來檢查 package 是否屬於 Bioconductor(因為安裝不同於 R CRAN ZEFE90A8E604A7C840E88D03A67F6B7D8。
例如,我想做這樣的事情:
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)
現在您可以從這個 dataframe 中過濾您想要檢查的包 -
libraries <- c("ggplot2","Biobase")
result <- all_packages %>% filter(Package %in% libraries)
result
# Package source
#1 ggplot2 CRAN
#2 Biobase BioConductor
通過result$Package[result$source == 'CRAN']
和 BioConductor 作為result$Package[result$source == 'BioConductor']
從CRAN
獲取要安裝的包,這些包可以傳遞給它們各自的函數。
libraries <- c("ggplot2", "Biobase")
#Checking if the package belongs to CRAN or to Bioconductor and installing them accordingly.
for(lib in libraries){
if(!lib %in% installed.packages()){
if(lib %in% available.packages()[,1]){
install.packages(lib,dependencies=TRUE)
}else {(BiocManager::install(lib))
}}
}
#Loading the libraries
sapply(libraries,require,character=TRUE)
我認為這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.