您可以静默安装 Bioconductor 软件包吗?
Can you silently install Bioconductor packages?
我正在 Snakemake 中编写调用 R 脚本的管道。这个 R 脚本有自己的环境,里面有 r-base
、r-ggplot2
和 r-biocmanager
。我还需要可以用 biocmanager
安装的软件包 ggbio。我想在调用脚本时静默安装这个包,因为我不想让它淹没我的终端。有没有办法做到这一点?我现在有这个,但这仍然会向终端输出分期付款信息:
if(!require(ggbio, quietly=TRUE)){ # if the package is not there, install it
BiocManager::install("ggbio")
library(ggbio)
}
...
我也试过这个我看到了 here:
if(!suppressMessages(suppressWarnings(require(ggbio, quietly=TRUE)))){
BiocManager::install("ggbio")
library(ggbio)
}
# OR
if(!require(ggbio, quietly=TRUE)){
suppressMessages(suppressWarnings(BiocManager::install("ggbio")))
library(ggbio)
}
...
但这也仍然输出到终端。似乎也没有办法给出像 quietly=TRUE
到 BiocManager::install("ggbio")
.
这样的论点
编辑:
invisible()
、capture.output()
和 sink()
按照建议 也不起作用:
# invisible(capture.output()) around install
if(!require(ggbio, quietly=TRUE)){
invisible(capture.output(BiocManager::install("ggbio"))) # doesn't work
}
# invisible(capture.output()) around entire if.
invisible(capture.output(if(!require(ggbio, quietly=TRUE)){ # doesn't work
BiocManager::install("ggbio")
}))
# sink() (Linux)
sink("/dev/null") # doesn't work
if(!require(ggbio, quietly=TRUE)){
BiocManager::install("ggbio")
}
sink()
# only invisible()
if(!require(ggbio, quietly=TRUE)){
invisible(BiocManager::install("ggbio")) # doesn't work
}
编辑 2:
我了解到 Bioconductor 包在 bioconda 频道中可用,所以如果你像我一样使用 environment.yaml
文件,你可以像这样列出 Bioconductor 包:
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- r-base=4.1.1
- r-ggplot2=3.3.5
- bioconductor-ggbio
如果您必须安静地安装软件包,您可以这样做:
suppressMessages({
if (!requireNamespace("ggbio", quietly = TRUE))
BiocManager::install("ggbio", quiet = TRUE)
})
但是查看安装是否有问题总是一个好主意。
我正在 Snakemake 中编写调用 R 脚本的管道。这个 R 脚本有自己的环境,里面有 r-base
、r-ggplot2
和 r-biocmanager
。我还需要可以用 biocmanager
安装的软件包 ggbio。我想在调用脚本时静默安装这个包,因为我不想让它淹没我的终端。有没有办法做到这一点?我现在有这个,但这仍然会向终端输出分期付款信息:
if(!require(ggbio, quietly=TRUE)){ # if the package is not there, install it
BiocManager::install("ggbio")
library(ggbio)
}
...
我也试过这个我看到了 here:
if(!suppressMessages(suppressWarnings(require(ggbio, quietly=TRUE)))){
BiocManager::install("ggbio")
library(ggbio)
}
# OR
if(!require(ggbio, quietly=TRUE)){
suppressMessages(suppressWarnings(BiocManager::install("ggbio")))
library(ggbio)
}
...
但这也仍然输出到终端。似乎也没有办法给出像 quietly=TRUE
到 BiocManager::install("ggbio")
.
编辑:
invisible()
、capture.output()
和 sink()
按照建议
# invisible(capture.output()) around install
if(!require(ggbio, quietly=TRUE)){
invisible(capture.output(BiocManager::install("ggbio"))) # doesn't work
}
# invisible(capture.output()) around entire if.
invisible(capture.output(if(!require(ggbio, quietly=TRUE)){ # doesn't work
BiocManager::install("ggbio")
}))
# sink() (Linux)
sink("/dev/null") # doesn't work
if(!require(ggbio, quietly=TRUE)){
BiocManager::install("ggbio")
}
sink()
# only invisible()
if(!require(ggbio, quietly=TRUE)){
invisible(BiocManager::install("ggbio")) # doesn't work
}
编辑 2:
我了解到 Bioconductor 包在 bioconda 频道中可用,所以如果你像我一样使用 environment.yaml
文件,你可以像这样列出 Bioconductor 包:
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- r-base=4.1.1
- r-ggplot2=3.3.5
- bioconductor-ggbio
如果您必须安静地安装软件包,您可以这样做:
suppressMessages({
if (!requireNamespace("ggbio", quietly = TRUE))
BiocManager::install("ggbio", quiet = TRUE)
})
但是查看安装是否有问题总是一个好主意。