目前还没有什么有用的R包?

时间:2009-11-10 15:46:15

标签: r packages

我一直在研究一些R软件包,用于R目前不具备的一些常规工具:博客,报告交付,日志记录和日程安排。这让我想知道:R中人们希望存在哪些最重要的东西,目前还没有?

我希望我们可以用它来查明一些差距,并可能协同工作。

12 个答案:

答案 0 :(得分:16)

我以前是Mathematica瘾君子,我真正想念的一件事就是笔记本风格的界面。当我用笔记本进行研究时,论文几乎会在我进行分析时写出来。但是现在我正在使用R,我发现记录我的工作非常繁琐。

对于那些不太熟悉Mathematica的人,你有一个名为“notebooks”的文档,它们可以包含代码,文本,方程式以及执行代码的结果(可以是方程式,文本,图形或交互式工具)。所有东西都可以整齐地组织成可折叠的样式子部分或部分。您可以拥有多个与单个共享内核集成的打开文档。

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

答案 1 :(得分:12)

实时R包将是我的选择,也许使用C Streaming。

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

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

答案 2 :(得分:10)

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

如果我们在此基础上拥有类似DBI的抽象,那当然会很好。 Jeff已经开始使用RBerkeley但是使用旧版的Oracle BerkeleyDB后端而不是其中一个新东西。

答案 3 :(得分:8)

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

答案 4 :(得分:5)

作为同事的图书馆程序员和作家,我肯定错过了一个日志包,我用Google搜索并问了一下here too,然后自己写了一个。它在r-forge上,here,它被称为“日志”:)

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

答案 5 :(得分:4)

.NET框架的自然界面非常棒,但我怀疑这可能会有很多工作。

编辑: 从RGui内部突出显示的语法也很精彩。

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

答案 6 :(得分:4)

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

RMySQL非常有用,但您必须手动编写SQL查询,并且无法像在ORM中那样生成它们。 Morevoer,它只针对MySQL。

R仍然没有的另一个库集,对我来说,它是一个很好的读取命令行参数的系统:有R getopt,但它与python中的argparse没有任何关系。 / p>

答案 7 :(得分:3)

FRAQ一系列常见问题解答,la fortune()。 R-help非常有趣:"试试这个,library(FRAQ); faq("lattice won't print")等等。

See also.

答案 8 :(得分:3)

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

突然间你有一个包含维基文档的文档,包含可重现的例子(甚至可以挂钩到R CMD check)。

2012年编辑:

...现在knitr包会使这个过程变得更容易和更整洁

答案 9 :(得分:2)

我希望看到用户能够以更直接的方式在R中嵌入另一种编程语言的可能性。我在一些常见的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函数(对后者更感兴趣),这将是一件好事。

答案 10 :(得分:1)

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

答案 11 :(得分:1)

我非常喜欢线型探测器。这存在于Matlab和Python中,对于查找占用大量时间或执行得比预期更多(或更少)的代码位非常有用。我的很多代码都涉及函数优化以及事先可能无法知道迭代的次数(尽管大多数迭代都受到约束或指定)。

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

为给定的代码位开发行分析器非常容易。一种天真的方法是索引每一行(或只是预先指定的部分)并插入对该行的日志proc.time()的调用。在循环中,我只是枚举代码部分并在二维列表中存储迭代proc.time中部分i的{​​{1}}值。 [请参阅下面的更新:这实际上不是为各种代码执行行分析器的方法。]

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

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