首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于生物信息学/生物统计学/医学研究的Clojure或Scala

用于生物信息学/生物统计学/医学研究的Clojure或Scala
EN

Stack Overflow用户
提问于 2011-03-10 02:32:43
回答 9查看 6.8K关注 0票数 28

我不是一个专业的程序员(我的专业是医学研究),但我精通C/C++和各种脚本语言。不久前,我对Lisp很感兴趣,但我从来没有时间认真学习它。在短暂接触了R之后,我决定花更多的时间学习函数式编程语言。

我喜欢JVM语言的实用性,因此将范围缩小到Clojure和Scala。据我所知,两者都可以使用已经存在的Java库,并且可以将性能关键型代码委托给Java,具有相对相同的执行能力。

在我需要它们的应用程序空间中,这两种语言相比如何?在生物信息学中有使用这两种方法的实际项目吗?

已经存在的代码将是一个重要的加分,良好的文档和相当平缓的学习曲线也是如此。另外,两者的并发模型如何比较?

任何人都有显著的优势/劣势吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-03-10 05:19:43

我个人可以保证Clojure是这类工作的一个很好的工具。(我相信Scala也会很棒,只是我用它的经验较少)。

我个人的研究是在预测建模/机器学习领域,计算非常密集-所以我认为它与生物信息学或生物统计学有许多相似之处。

我个人的方法/设置包括:

  • Incanter主要用作数据可视化工具。非常适合于生成快速可视化效果,这通常只是REPL中的1行代码。还有许多统计和数值处理工具,我相信它们都在幕后使用Colt库。我不是R方面的专家,但我知道Incanter大体上是"R“翻译成Clojure/Lisp".
  • Exploiting的,有相当多的Java库需要。其中一些是我自己的,例如我用Java编写的算法,以便从JVM中获得最佳的微调性能。但是你同样可以很容易地使用任何其他可用的Java库,因为从Clojure调用Java是非常简单的(.methodName object param1 param2)
  • 有很多高阶函数来自动化我的工作流程。例如,我有一个高阶函数,它将在指定的时间内在循环中运行任何类型的优化算法,然后在每次迭代中生成改进的Incanter图。这不是什么高深的科学,但用几行Clojure代码就可以很容易地编写代码。
  • 从来不必真正担心性能问题。如果你愿意的话,你可以让Clojure运行得非常快(例如,通过类型提示、原始算法支持等)。但通常这是无关紧要的,因为无论如何你都会在优化良好的库代码中花费99%+周期。因此,“粘合”代码中的一些开销可以忽略不计--我觉得通过使用一种动态的、高级的、函数式的语言,我可以获得更多的个人生产力。
  • 主要使用Clojure的concurrency features --这必须是Clojure最强大的特性之一。我倾向于使用STM对事务的并发进程进行编码,这些事务不能相互干扰,然后在将来启动长期运行的计算,这样我就可以继续执行其他任务,并等待结果的通知。
  • 当需要时,用于“扩展语言”的宏的集合慢慢增加。实际上,我使用宏的次数比我想象的要少(高阶函数通常是更好的选择)。但是当你需要它们的时候,它们是无价的--这是你真正欣赏homoiconic language价值的地方。由于它们有效地允许您向语言本身添加新的语法,因此当正确使用它们来构建所需的领域特定语言时,它们是非常强大的。

简而言之,我认为作为一名研究人员,使用Clojure是没有错的。

有一件事我可能还不会使用它,那就是编写一个新的数值库--这可能在Scala或纯Java中做得更好,因为您可能想要采用更多的命令式/ OOP风格。

票数 32
EN

Stack Overflow用户

发布于 2011-03-10 03:02:35

我对生物信息学和生物统计学本身不太了解,但我经常进行科学数据分析,而且我很欣赏Scala让我能够相对轻松地编写与Java一样快的代码。我相信现在在Clojure中这通常是可能的,但我还没有看到支持这一点的基准测试。就目前而言,我认为谨慎的假设是,它们的表现并不一样好。例如,查看Computer Languages Benchmark Game,其中Scala在每一次测试中都比Clojure更快。(忽略Clojure可怕的"pidigits“结果--Scala(和Java)正在调用用C编写的GMP库,这是Clojure可以做的,但由于技术细节需要对库进行不同的包装,目前游戏中不允许这样做)。查看multicore comparisons并不能改善Clojure的表现,请注意,Clojure代码对于这些低级算法任务并不短。

Clojure目前在并行集合方面处于领先地位,尽管即将发布的Scala 2.9版本应该会弥补很大的差异。从C++开始,两者都没有平缓的学习曲线;Scala可能更容易一些,因为它的语法看起来更熟悉一些。我相信它们都有很好的学习材料。

编辑: P.S.您可以使用rJava (特别是JRI接口)从Java (因此也可以从Clojure或Scala)调用R。编辑来编辑:这些天,还有rScala

编辑#2:在编写本文时,Scala在所有方面都比Clojure快;到本次编辑时,Clojure略微领先一步(以大量代码为代价)--但不管怎样,总体观点是成立的。(在这一个测试上的Scala实现可以加速。)

票数 22
EN

Stack Overflow用户

发布于 2011-03-10 02:46:50

如果你喜欢R,试试Incanter吧!R代表Clojure

Scala的目的是为了让来自Java的人在语法上更容易,这是为了让来自C语言的人在语法上更容易,尽管有了这样的两层间接性,这种优势可能会消失。

Clojure在大数据领域获得了很大的吸引力,并很好地映射到了针对大数据的Hadoop作业上。我认为这在生物信息学领域将是一个很大的优势。

真的,这些东西很大程度上是个人喜好,所以两个都试一试,看看这会让你开心:)

如果你想在没有太多“智力开销”的情况下感受一下Clojure,我建议你使用leiningen来快速开始一个测试项目。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5250459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档