什么是有用的R包';现在不存在吗?

什么是有用的R包';现在不存在吗?,r,packages,R,Packages,我一直在为一些目前在R中不可用的通用工具开发一些R包:博客、报告交付、日志记录和调度。这让我想知道:人们希望R中存在的最重要的东西是什么,而目前还没有 我的希望是,我们可以利用这一点来找出一些差距,并可能协作解决这些差距。一个自然的.NET framework接口将非常棒,尽管我怀疑这可能需要大量的工作 编辑: 从RGui中突出显示语法也会很好 另一编辑: 现在可以将R与.NET集成。接口可连接到任何使用键值对而不是标准RDM的新型“Web 2.0”数据库。非详尽清单(按字母顺序)如下:

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


我的希望是,我们可以利用这一点来找出一些差距,并可能协作解决这些差距。

一个自然的.NET framework接口将非常棒,尽管我怀疑这可能需要大量的工作

编辑: 从RGui中突出显示语法也会很好

另一编辑:
现在可以将R与.NET集成。

接口可连接到任何使用键值对而不是标准RDM的新型“Web 2.0”数据库。非详尽清单(按字母顺序)如下:


当然,如果我们在上面有一个类似DBI的抽象,那就太好了。Jeff开始使用的是老式的Oracle BerkeleyDB后端,而不是那些新东西。

通常很少有库与数据库接口,也没有ORM库

RMySQL很有用,但是您必须手动编写SQL查询,并且没有办法像在ORM中那样生成它们。而且,它只针对MySQL


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

我会选择实时R包,可能使用C流

另外,我想要一个更健壮的web开发包。没有比RubyonRails更广泛的了,但是比Swave结合R2HTML更好的东西,可以在RApache上运行。我认为这应该是R的一大重点领域


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

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

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

对于不太熟悉Mathematica的人,您可以使用名为“笔记本”的文档,其中可以包含代码、文本、公式和执行代码的结果(可以是公式、文本、图形或交互式工具)。任何东西都可以整齐地组织成可折叠的样式化小节或部分。您可以有多个与单个共享内核集成的开放文档


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

一种产生Javascript代码的输出设备,也许是使用protovis库。

我希望用户能够以更直接的方式在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))
(defun示例(x)
(ffi:c-inline(n1-n2)(:int:int)(值:int:int){
INTN1=0,n2=1,out1=0,out2=1;

(n1作为一名程序员和同事库的编写者,我肯定错过了一个日志包,我在谷歌上搜索并四处询问,然后自己写了一个。它在r-forge上,叫做“日志”:


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

我非常喜欢线条分析器。它存在于Matlab和Python中,对于查找花费大量时间或执行更多(或更少)的代码非常有用我的很多代码都涉及函数优化,而且可能事先不知道迭代的次数(尽管大多数迭代都是受约束的或指定的)

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

为给定的代码开发一个行分析器非常容易。一种简单的方法是为每一行(或预先指定的部分)编制索引,并插入对log
proc.time()的调用
那一行。在循环中,我只需列举代码段,并将迭代
k
I
段的
proc.time
值存储在二维列表中[请参见下面的更新:这实际上不是为所有类型的代码创建行分析器的方法。]

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


更新1:在每个功能行之间插入一个计时行有点错误:代码行的定义不仅仅是由空格分隔的代码。能够将代码解析为AST对于了解操作的开始和结束位置是必要的。正如在的一些答案中所讨论的,有一些工具(也就是说,
codetools
包中的
showTree
walkCode
)这样做。简单地将正则表达式应用于源代码将是一件非常糟糕的事情。

a
FRAQ
常见问题包,la
fortune()
。R-help将非常有趣:“试试这个,
库(FRAQ);足总