【问题标题】:How to tell if a Github repository is an R package如何判断 Github 存储库是否是 R 包
【发布时间】:2013-09-10 20:03:18
【问题描述】:

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

我认为这很容易。好像不是。

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

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

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

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

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

【问题讨论】:

标签: r git search github


【解决方案1】:

你可以解析github页面的repos。

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

如何解析。

您的搜索请求的网址是

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">▶</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" 就能找到很多东西。

最后要做的就是制定某种可以做出决定的逻辑!

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2013-05-12
    • 2011-09-08
    • 2021-07-26
    • 2013-10-31
    • 2010-12-26
    相关资源
    最近更新 更多