【发布时间】:2021-10-07 18:19:18
【问题描述】:
我在 Anaconda 的 renv 环境中使用 RStudio。我想一次更新 renv 中的 r 包。 Merv 的命令in this post 一次只更新一个包(在下面的代码中它只更新 askpass 包)
conda install -n renv -c conda-forge r-askpass
但是,由于我有一长串要更新的 r 包,我想知道是否有任何命令可以一次更新所有 r 包。谢谢。
【问题讨论】:
我在 Anaconda 的 renv 环境中使用 RStudio。我想一次更新 renv 中的 r 包。 Merv 的命令in this post 一次只更新一个包(在下面的代码中它只更新 askpass 包)
conda install -n renv -c conda-forge r-askpass
但是,由于我有一长串要更新的 r 包,我想知道是否有任何命令可以一次更新所有 r 包。谢谢。
【问题讨论】:
CLI 仅提供两个选项:
conda update pkg1 pkg2 ...
conda update --all
所以,不是任何可以指定所有 R 包的地方。
在两者之间取得一些东西的一个技巧是使用 conda list 的正则表达式功能来获取匹配包的列表,然后使用一些 UNIX 命令将这些作为参数发送到 conda update 命令。
对于以r- 或bioconductor-(R 包的两个最常见前缀)开头的所有包,这样做如下所示:
# environment you wish to update
ENV_NAME=renv
# update all `r-` and `bioconductor-` packages
conda list -n ${ENV_NAME} '^(r|bioconductor)-' | \
grep -vE '^#' | cut -f1 -d' ' | \
xargs conda update -n ${ENV_NAME} -d
重要提示:我在conda update 中包含了-d(试运行)标志,以防止自动接受提议的更改,这似乎是由在此处使用xargs 触发的。我强烈建议您按原样首先使用(始终查看更改!),然后在查看后再次执行,不要使用-d。
【讨论】:
-d?