簡體   English   中英

是否可以檢查 package 是否屬於 Bioconductor 或 Cran?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM