【问题标题】:Are statistical programming languages like R/SAS considered functional or procedural [closed]像 R/SAS 这样的统计编程语言被认为是功能性的还是程序性的[关闭]
【发布时间】:2015-09-17 16:16:20
【问题描述】:

看了this之后还是不明白区别

所以,与其问函数式编程和过程式编程有什么区别,我想,也许我熟悉的语言可以作为一个例子。

因此,我的问题是:R/SAS 语言被认为是程序性的还是功能性的?

【问题讨论】:

  • 我可以告诉您 Hadley Wickham 对您的问题的看法,请阅读 here
  • 可以将这个问题一分为二,因为 R 和 SAS 完全不同,尤其是在面向对象编程方面。

标签: r functional-programming sas procedural-programming


【解决方案1】:

我会说 R 绝对是程序性的;函数式编程不仅仅是使用函数,例如,使用一些粗略的模块化;确实是f.p。致力于极端模块化,这是其主要优势之一;查看 John Hughes 的经典论文“为什么函数式编程很重要”以了解更多信息。

对我来说,SAS 似乎更有特殊用途,旨在将数据组织成表格并在其上进行统计报告。它似乎与函数式编程没有特别的关系;我仍在调查它的程序能力(或缺乏)

【讨论】:

  • 我不同意您的评估,并认为 R 具有很强的功能导向。我特别不同意您将 R 描述为程序性的。 R 评估表达式,而不是像 SAS 这样的过程语言那样的语句。将其与语言的功能导向或鼓励相结合,我很容易认为它是一种功能语言。
【解决方案2】:

R 主要是一种函数式编程语言。它确实有一些例外情况是通过副作用完成的,因此它的功能不如 Haskell。尽管如此,如果您不愿意调整您的编程风格以使用函数,那么您将很难编写高效的 R 代码。 (我写这个答案的唯一原因是,将 R 称为面向对象的语言会误导那些希望能够以与 Java 相同的方式向数据对象发送函数消息的人。 R 使用对象的类作为“通用”函数的调度选择机制,但这与完整的 OO 语言不同。)

R 有 3、4 或 5 个主要对象类,具体取决于您如何看待它们和相关的函数类型。仅在其第一个参数的类上分派的原始 S3 函数可能仍然是最常用的,尽管可以在多个参数签名上分派的 S4 类在 BioConductor 世界中被广泛使用。引用类或 R5 或原型类对象最类似于真正的面向对象编程数据类型。我对最后一句话有点含糊,因为我对他们缺乏太多经验。

SAS 主要是一种程序语言。您可以定义函数,但这不是大多数人与 SAS 及其数据集交互的方式,至少一开始是这样。至少 15 年前我使用它时,它并没有真正的对象模型。我认为它的主要优势是对“报告写作”的出色支持。

(数据操作“R 中很难”的评论只是表明缺乏经验。我在 R 中进行数据操作所需的代码量比我的 SAS 同事使用的代码要少得多。如果你开始在SAS,那么转换会很困难,但是我们这些已经改变的人一般都坚持使用R。)

【讨论】:

  • 宏不就是SAS相当于函数吗?我相信 SAS 的发明者认为它是程序性的,因为一切都是“过程”:)
  • @Victor :我确实说过你可以用 SAS 定义函数,尽管我怀疑调度机制与 R 一样有很多方式。我强烈怀疑它是仍然没有教新的 SAS 用户编写 SAS 宏。
  • 谢谢。我读到函数式语言自然适合并行处理。在R中做并行处理容易吗,类似于让我们说(Java的执行器框架)
  • 我完全没有使用 SAS 的经验,但考虑到所有可用于 R 的新工具:R Markdown、Shiny、Slidify ......实际上,我很难想象有什么比生成报告更好。
  • 我同意你的观点。无论如何,我从来没有真正喜欢过 SAS 报告的表格格式,但它们一度被认为是常态。但是,我会问 Shiny 是否属于“报告”设施列表,除非将类别扩大到包括“显示机制”​​。我会提名 knitr 和 Sweave。
猜你喜欢
  • 2010-09-13
  • 2012-10-02
  • 2013-09-22
  • 2011-03-03
  • 1970-01-01
  • 2011-02-09
  • 2018-02-22
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多