2

我的目标是创建一个 R 函数(或一组 R 函数)来搜索 Github(可能通过搜索 API或其他方式),以识别 Github 上可用的 R 包。这将模仿 R 的available.packages()功能,但对于 CRAN 上的包的开发版本(不是)。

我以为这很容易。似乎不是。

可以从搜索所有使用 R 语言的存储库开始。结果是大约 8,199 个存储库。但其中许多不是 R 包,而是书籍、课程或杂项。我希望能够将搜索结果提供给devtools::install_github函数,这显然会在实际上不是包的东西上失败。

那么,有什么方法可以识别 Github 存储库是否是 R 包?我的直觉是能够通过它们的区别特征来识别包:

  • /R 和 /man 目录
  • 描述文件
  • 命名空间文件
  • 其他的?

但我不知道如何做到这一点。显然,可以下载每个存储库(就像下载一样devtools::install_github,然后检查它是否是一个包,但这似乎太过分了)。

有什么见解吗?(我不一定要在这里寻找完整的解决方案。)

4

1 回答 1

1

您可以解析 repos 的 github 页面。

您所需要的只是一个您喜欢的语言的解析库。我从来没有在 R 中做过(通常,我使用 Python),但我想你会找到一些东西。如果用于解析的 R 工具不够方便,您可以使用另一种语言来解析数据并使用 R 来处理它。

如何解析。

您的搜索请求的 URL 是

https://github.com/search?p=1&q=language%3AR&ref=simplesearch&type=Repositories

然后看分页块。

<span class="disabled prev_page">◀</span> 
<span class="current">1</span> 
<a href="/search?p=2&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories" rel="next">2</a> 
<a href="/search?p=3&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">3</a> 
<a href="/search?p=4&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">4</a> 
<a href="/search?p=5&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">5</a> 
<a href="/search?p=6&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">6</a> 
<a href="/search?p=7&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">7</a> 
<a href="/search?p=8&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">8</a> 
<a href="/search?p=9&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">9</a> 
<span class="gap">&hellip;</span> 
<a href="/search?p=99&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">99</a> 
<a href="/search?p=100&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories">100</a> 
<a href="/search?p=2&amp;q=language%3AR&amp;ref=simplesearch&amp;type=Repositories" class="next_page" rel="next">▶&lt;/a></div>

您可以使用解析选择器在此处获取页码 (100)。然后,您可以为它们解析所有 repos 标题和链接。他们看起来像

<h3 class="repolist-name">
    <a href="/hadley/devtools" class="css-truncate css-truncate-target">hadley/devtools</a>
</h3>

使用 url 并将页面从 1 更改为 max,您可以获得所有 repos 和链接。然后看看回购页面。例如,我们正在寻找 NAMESPACE。

<td class="content">
    <span class="css-truncate css-truncate-target"><a href="/hadley/devtools/blob/master/NAMESPACE" class="js-directory-link" id="7347fe5a0f184f79ef064e92e3beb297-5343453e5cabfcbdea6f829e232c6f994af44719" title="NAMESPACE">NAMESPACE</a></span>
</td>

只需搜索 css-class "js-directory-link",您就可以找到很多东西。

最后要做的是做出某种逻辑来做出决定!

于 2013-09-11T19:55:46.263 回答