2014-03-02 18 views
0

为了求解R中的线性逆模型,有一个称为LIM的优秀包(http://cran.r-project.org/web/packages/LIM/)。 模型问题以自然且易于理解的方式在文本文件中制定。 LIM中的函数然后将该输入转换为所需的线性相等和不等式条件,这可以通过最小二乘法或通过线性编程技术来解决。LIM包装在R中:更快地读取输入

我有一个文本File与约。 6000行(等式,不等式,组件,参数的简单列表),它描述了线性逆模型。 我使其可至R用于处理由以下2行

liminput <- Read(File) 
lim <- Setup(liminput) 

问题: 的2行需要大约5分钟来运行。 第一行读取命令占这5分钟的几乎100%。

问题: 有没有办法让它更快?

+0

这将很难回答,原因有两个。 (1)它使用了一个特殊的附加软件包,可能不是非常广泛使用(因此潜在的受访者将不得不在挖掘并在回答之前找出软件包的细节)。 (2)你还没有给出[可重现的例子](http://tinyurl.com/reproducible-000)。 ...你能提供更多细节吗?在上面指定的两条线之间的运行时间如何划分(慢读/快速设置或反之亦然,或者两者大致相等)? –

回答

1

我不认为会有一个非常简单的答案,您可能需要找到一些方法来重写速度更快的Read()函数(但请参阅下面的一种可能性)。仔细查看Read()函数(如果您不知道,可以通过键入Read来打印源代码),它基本上是按行读取并在R代码中解析它们。大部分操作可能会很难向量化,并适度难以在Rcpp/C++重新写...

诺姆·罗斯写了一very accessible guide to speeding up R code(第一建议,一个是“得到更好的电脑”)。实际上,只有一个“低挂水果”的建议可能无需自己深入研究代码即可使用R的字节编译器:

library(compiler) 
Read.comp <- cmpfun(Read) 
Read.comp(File) ## **maybe** faster than Read(File) ... 
+0

谢谢,刚刚尝试过使用编译器'cmpfun()'的建议。不幸的是,当我使用system.time()进行基准测试时,没有改变任何东西。现在我将看看Read()的代码来检查任何速度潜力。 – user2030503