1

我正在寻找一种在 R 中从 GitHub 存储库获取最新版本的方法。例如,对于存储库acornamr/acorn-dashboard,它将返回字符串"v2.0.5"(截至 2021 年 9 月 16 日的https://github.com/acornamr/acorn-dashboard/releases)。

我试图查看remotes::install_github() https://github.com/r-lib/remotes/blob/master/R/install-github.R的源代码,但没有成功。

4

4 回答 4

3

使用gh包:

library(gh)

releases <- gh("GET /repos/{owner}/{repo}/releases", 
   owner = "acornamr",
   repo = "acorn-dashboard")

releases[[1]][["tag_name"]]
# "v2.0.5"
于 2021-09-16T18:08:05.070 回答
2

嗯,稍微偏离了 OP 的主题,但相关的答案:

微软存储了 CRAN 的每日快照。这项免费服务称为 MRAN。

您可以将 MRAN 每日快照设置为repos选项,并install.packages()在下载时使用该存储库。这样,您始终可以从特定时间点下载软件包。在您的情况下,您总是想要最新的,因此Sys.Date()请用作您选择的日期。

# MRAN snapshots
base_url <- "http://mran.revolutionanalytics.com/snapshot/"

# download from MRAN on this date
when <- Sys.Date() # or any date as YYYY-MM-DD

# set options
options(repos = list(CRAN = paste0(base_url, when)))

# the repo option set above defines where to download packages from
install.packages("my_package")

这在使用 Docker 构建生产级 R 代码时特别有用,因为您可以确保安装到映像中的包始终来自相同的静态日期。我使用这样的东西:

ARG WHEN

RUN R -e "options(repos = \
  list(CRAN = 'http://mran.revolutionanalytics.com/snapshot/${WHEN}')); \
  install.packages('my_package')"
于 2021-09-16T17:47:23.180 回答
1

我最终对网页进行了网页抓取并提取了正确的 html 元素:

library(rvest)
library(stringr)

read_html("https://github.com/acornamr/acorn-dashboard/releases/latest") |> 
  html_element(".release-header .f1") |>
  html_text() |>
  str_trim()

返回"v2.0.5"

与@Stéphane Laurent 解决方案相比,此方法的优点library(gh)在于您不必处理GitHub PAT. 缺点是它依赖于 GitHub.com 的 HTML 元素,这些元素可能会随着网站设计而发展。

于 2021-09-17T14:34:04.453 回答
0

截至目前,我不确定remotes::install_github. 您可以使用以下命令选择要下载的版本

remotes::install_github('acornamr/acorn-dashboard@v2.0.5')

如需进一步阅读,请看这里

于 2021-09-16T17:44:46.700 回答