如何判断Github存储库是否为R包

时间:2013-09-10 20:03:18

标签: r git search github

我的目标是创建一个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目录
  • 说明文件
  • NAMESPACE文件
  • 他人?

但我对如何做到这一点感到迷茫。显然,可以下载每个存储库(如devtools::install_github一样,然后检查它是否是一个包,但这似乎过多了。)

任何见解? (我不一定在这里寻找完整的解决方案。)

1 个答案:

答案 0 :(得分:1)

您可以解析repos的github页面。

您需要的只是一个您喜欢的语言的解析库。我从来没有在R中做过(通常,我使用Python),但我认为你会找到一些东西。如果用于解析wiil的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>

使用网址并将页面从1更改为最大可以获得所有回购和链接。然后看一下repo页面。例如,我们正在寻找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”,你就可以找到很多东西。

要做的最后一件事就是制定某种能够产生决定的逻辑!