【问题标题】:What useful R package doesn't currently exist? [closed]目前不存在什么有用的 R 包? [关闭]
【发布时间】:2016-01-04 16:39:16
【问题描述】:

我一直在为一些 R 中当前不可用的通用工具开发一些 R 包:博客、报告交付、日志记录和调度。这让我想知道:人们希望存在于 R 中但目前不可用的最重要的东西是什么?

我希望我们可以使用它来查明一些差距,并可能合作解决它们。

【问题讨论】:

  • 在 R 中重建一个操作系统,嗯?
  • 我姓坎波斯吗?德克,我们都知道,如果你要重建一个操作系统,你应该先开发自己的语言(最好从汇编语言),然后使用自己的语法来构建它。
  • 我认为我对这个问题存在存在问题。不存在的 R 包没有用处。
  • 你必须发挥你的想象力。但需要明确的是,我对大量 useless 不存在的包不感兴趣。

标签: r packages


【解决方案1】:

我以前是 Mathematica 迷,我真正怀念的一件事是笔记本风格的界面。当我用笔记本做研究时,论文几乎会像我做分析一样自己写出来。但是现在我在使用 R,我发现记录我的工作非常乏味。

对于不太熟悉 Mathematica 的人,您可以使用称为“笔记本”的文档,其中可以包含代码、文本、方程式以及执行代码的结果(可以是方程式、文本、图形或交互式工具)。一切都可以整齐地组织成样式化的子部分或可折叠的部分。您可以拥有多个与单个共享内核集成的打开文档。

虽然我不认为完全需要一个成熟的 Mathematica 风格界面,但一些支持文本(用于描述)、代码、代码输出和嵌入式图像输出的交互式文档系统对研究人员来说将是一个真正的福音。

【讨论】:

  • 我认为这是个好主意。昨晚我自己也在考虑这个问题。 Matlab 具有相同的功能(您可以在文档中运行 Matlab 代码)。这将是一个大工程。只是考虑实现,最好在他们正在开发的现有 html 框架上使用 javascript 来执行此操作。因此,任何部分标记的代码都可以突出显示并执行。
  • SAGE 项目 (sagemath.org) 已经实现了类似的东西——R 是支持的众多后端之一。不过总有改进的余地!
  • 我喜欢这个想法,并且对于像brew 这样的包,真正缺少实现该功能的用户界面。也许最容易在 Sage 等网络浏览器或 R-studio 中实现?
  • 关注@Sharpie 评论:检查sagenb.org 这是一个在线笔记本
  • RStudio / knitR 这样做,对于任何登陆这个问题的人!
【解决方案2】:

Real-Time R 包是我的选择,也许使用 C Streaming。

我还想要一个更强大的 Web 开发包。没有什么比 Ruby on Rails 更广泛,但比 Sweave 与 R2HTML 结合的更好,可以在 RApache 上运行。我认为这需要成为 R 的一个重点领域。

我意识到 LaTeX 对某些学术界来说是更好的标记,但总的来说,我认为 HTML 应该是首选的标记语言。在 R Web Apps 方面需要做更多工作,因此应用程序可以远程托管在巨大的 RAM 上,并且 R 可以开始用于 SaaS 数据应用程序和其他图形选择。

【讨论】:

  • +1 支持这个想法——这是我最近经常想到的事情。
【解决方案3】:

与使用键值对而非标准 RDMS 的任何新型“Web 2.0”数据库的接口。一个非详尽的列表(按字母顺序)将是

如果我们在此之上有一个类似 DBI 的抽象当然会很好。 Jeff 从 RBerkeley 开始,但使用的是老式的 Oracle BerkeleyDB 后端,而不是那些新事物之一。

【讨论】:

【解决方案4】:

产生 Javascript 代码的输出设备,可能使用 protovis 库。

【讨论】:

【解决方案5】:

作为一名程序员和同事的库编写者,我肯定缺少一个日志包,我在谷歌上搜索并四处询问,here too,然后自己写了一个。它在 r-forge 上,here,它被称为“日志记录”:)

我正在使用它,而且我显然还在开发它。

【讨论】:

    【解决方案6】:

    一般来说与数据库接口的库很少,也没有ORM库。

    RMySQL 很有用,但您必须手动编写 SQL 查询,并且无法像在 ORM 中那样生成它们。而且,它只特定于 MySQL。

    R 还没有的另一个库集,对我来说,它是一个很好的读取命令行参数的系统:有 R getopt,但它与 Python 中的 argparse 完全不同。

    【讨论】:

    • 对于一般数据库,你看过 DBI、RODBC 或 JODBC 吗?
    • 除了 getopt,还有最近从 R-Forge 到达 CRAN 的 optparse 包。
    • Whit Armstrong 还创建了 Unifieddbi:github.com/armstrtw/unifieddbi
    • 感谢 cmets:我一直在寻找 R 中的 ORM 库,但它更多的是出于好奇而不是真正的需要。我会看看你的链接:)
    • 您的愿望已得到满足:github.com/johnmyleswhite/r-ORM
    【解决方案7】:

    .NET 框架的自然接口会很棒,尽管我怀疑这可能需要大量工作。

    编辑: 在 RGui 中突出显示语法也很棒。

    另一个编辑: R.NET 现在用于将 R 与 .NET 集成。

    【讨论】:

    • 不太确定 .Net 的想法——它过于以平台为中心,而 R 系统(从广义上讲)的优势之一是如何将底层平台大部分抽象掉。
    • @Dirk:它确实需要与 Mono 一起工作,才能跨平台并符合 R 的开源特性。
    • Mac RGui 有高亮显示,JGR 也有。
    • 我可以看到这将是多么有用(不管它是否是跨平台的)。
    • Romain Francois 有一个基于 R 解析器的源码级高亮项目:r-forge.r-project.org/projects/highlight
    【解决方案8】:

    FRAQ 的常见问题包,如 fortune()。 R-help 会很有趣:“试试这个,library(FRAQ); faq("lattice won't print"),等等。

    See also.

    【讨论】:

    • 另外,每个包都可以定义自己的常见问题条目列表。鉴于与财富的相似性,可能值得考虑包含一般概念的元包。
    【解决方案9】:

    一个wiki 包,将类似于 wiki 的文档添加到 R 包中。您将拥有一个 inst/wiki 子目录,其中包含 markdown、asciidoc、textile 中的纯文本文件,并带有嵌入式 R 代码。使用正确的咒语,这些文件将被执行(想想brew 和/或asciidoc 包),并将相关输出上传到在线给定存储库(github、googlecode 等)。另一个函数可以负责同步所做的更改在线,通常通过svngit

    突然间,您有了一个包含可重复示例的软件包的 wiki 文档(甚至可以连接到 R CMD check)。

    2012 年编辑:

    ...现在knitr 包将使这个过程更加简单和整洁

    【讨论】:

    • 如果没有其他原因,只有由 R 社区管理的统计 wiki 可能比 Wikipedia 上的统计条目好得多,那就太棒了。我认为条目可以由包维护者管理。
    • 感谢您的更新 - knitr 看起来很有趣。
    【解决方案10】:

    我希望用户能够以更直接的方式在 R 中嵌入另一种编程语言。我在一些 common-lisp 实现中举了一个例子,人们可以用这样的嵌入式 C 代码编写一个函数:

    (defun sample (x)
      (ffi:c-inline (n1 n2) (:int :int) (values :int :int) "{
        int n1 = #0, n2 = #1, out1 = 0, out2 = 1;
        while (n1 <= n2) {
          out1 += n1;
          out2 *= n1;
          n1++;
        }
        @(return 0)= out1;
        @(return 1)= out2;
        }"
       :side-effects nil))
    

    如果可以以类似的方式使用嵌入式 C 或 lisp 代码(对后者更感兴趣)编写 R 函数,那就太好了。

    【讨论】:

    • 是 cfunction {inline} 吗?它支持c、cpp、c++、f、f95、objc、objcpp、objc++。这是相当不错的。很高兴将 Lisp 添加到列表中。
    【解决方案11】:

    RGUI 的原生 .NET 接口。 R(D)Com 基于 COM,它只允许交换矩阵,不能交换更复杂的结构。

    【讨论】:

      【解决方案12】:

      我非常想要一个线轮廓仪。这存在于 Matlab 和 Python 中,对于查找需要大量时间或执行多于(或少于)预期的代码位非常有用。我的很多代码都涉及函数优化,并且事先可能不知道迭代的次数(尽管大多数迭代是受约束或指定的)。

      如果您的所有代码都在 R 中并且非常简单,则调用堆栈很有用,但作为 I recently posted about it,如果您的代码很复杂,则需要付出艰苦的努力。

      为给定的代码开发行分析器非常容易。一种天真的方法是索引每一行(或只是预先指定的部分)并插入一个调用以记录 proc.time() 该行。在一个循环中,我只是枚举代码段并将迭代ki 部分的proc.time 值存储在二维列表中。 [请参阅下面的更新:这实际上并不是对所有类型的代码进行线分析器的方法。]

      人们可以使用这样的工具来查找热点、异常(例如,应该是 O(n) 但实际上是 O(n^2) 的代码)、可能从记忆化中受益的代码(行分析器不会告诉你这个,但它可以让你知道在哪里看)、错误地在循环中的代码等等。

      更新 1:在每个函数行之间插入一条时序线是有一点错误的:一行代码的定义不仅仅是由空格分隔的代码。能够将代码解析为 AST 对于了解操作的开始和结束位置是必要的。正如this question 的一些答案中所讨论的,有一些工具(即codetools 包中的showTreewalkCode)可以执行此操作。简单地将正则表达式应用于源代码将是一件非常糟糕的事情。

      【讨论】:

        猜你喜欢
        • 2018-08-25
        • 2022-12-31
        • 2017-10-03
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多