0

我想提取 CRAN 上所有包的 github repo url。我尝试先阅读 CRAN 的链接并获取所有包名称的表,其中还包含每个包的描述页面的 url,因为我想通过描述页面提取 github repo url。但我无法获得完整的网址。你能帮我解决这个问题吗?或者有没有更好的方法来获取所有包的 repo url?

这是我的补充: 其实我想过滤那些确实有官方github repo的pkgs,比如一些pkgs如xfun或fddm。我发现我可以从 CRAN 上的 pkgs 描述中提取用户名和 repo 名称,并将它们放在 github 格式的 url 中。(对于它们中的大多数具有相同格式的 url,例如:https://github.com/{username}/{reponame}。例如,对于 package xfun,它会像:https://github.com/yihui/xfun .

现在,我得到了其中一些:(其中三个)

在此处输入图像描述

我想知道如何获得所有这些的网址。我知道使用胶水 pkg 可以替换 url 中的元素。为了通过替换元素(用户名和 reponame)来获取 url,我尝试了 map() 和 map_dfr() 函数。但它返回我错误: parse_url(url) 中的错误:length(url) == 1 is not TRUE

这是我的代码:

get <- map_dfr(dat, ~{
  
  username <- dat$user
  reponame <- dat$package
  
pkg_url <- GET(glue::glue("https://github.com/{username}/{reponame}"))

})

你能帮我解决这个问题吗?非常感谢 !:)

4

1 回答 1

1

我想建议一种不同的方法来到达你想要的地方。

正如评论中所讨论的,并非所有 R 包都有公共 GitHub 存储库。

这是Dirk Eddelbuettel 对另一个问题的回答中的一些代码版本,它从 CRAN 的数据库中检索信息,包括包名称和 URL 字段。如果一个包有一个公共的 GH 存储库,那么作者很可能在 URL 字段中包含了该信息:可能有一些包的 GH 存储库信息是可以猜测的(即 GH 用户名与(例如) 维护者电子邮件地址中的标识符;GH repo 名称与包名称相同),但要完成所有这些猜测(并访问 GitHub 以查看猜测是否正确)似乎需要做很多工作相对较低的回报。

getPackageRDS <- function() {
     description <- sprintf("%s/web/packages/packages.rds",
                            getOption("repos")["CRAN"])
     con <- if(substring(description, 1L, 7L) == "file://") {
         file(description, "rb")
     } else {
         url(description, "rb")
     }
     on.exit(close(con))
     db <- readRDS(gzcon(con))
     rownames(db) <- NULL
     return(db)
}
dd <- as.data.frame(getPackageRDS())
dd2 <- subset(dd, grepl("github.com", URL))
## clean up (multiple URLs, etc.)
dd2$URL <- sapply(strsplit(dd2$URL,"[, \n]"),
       function(x) trimws(grep("github.com", x, value=TRUE)[1]))

截至今天(2021 年 5 月 25 日),CRAN 上共有 17665 个包,其中 6184 个在 URL 字段中有“github.com”。以下是前几个结果:

        Package                                           URL
5        abbyyR              http://github.com/soodoku/abbyyR
12     ABCoptim           http://github.com/gvegayon/ABCoptim
16     abctools     https://github.com/dennisprangle/abctools
18        abdiv        https://github.com/kylebittinger/abdiv
20        abess           https://github.com/abess-team/abess
23 ABHgenotypeR http://github.com/StefanReuscher/ABHgenotypeR

URL 字段可能仍然不完全干净,但这应该可以帮助您完成大部分工作。


另一种方法是使用githubinstall包,它通过下载通过爬取 GitHub 寻找 R 包而生成的数据框来工作

library(githubinstall)
dd3 <- gh_list_packages()

目前这个列表中有 34491 个包,所以很明显它包含了很多 CRAN 上没有的东西。您可以将此软件包列表与来自available_packages()...的信息相交

于 2021-05-25T16:11:49.990 回答