人望山 鱼窥荷下一句_一窥R反文化

人望山 鱼窥荷下一句

早在2009年, SAS的安妮·米尔利(Anne Milley)在《纽约时报》的一篇文章中就驳斥了R语言日益重要的意义( R语言的竞争对手包括SAS,Python,以及最近的Julia )。 她说:

“我们有为飞机制造发动机的客户。我很高兴他们乘坐飞机时没有使用免费软件。”

在许多读者表示愤慨之后,Milley在SAS网站上写了一篇后续博客文章 ,采取了更为外交的态度。 她为SAS辩称它是一种可以因其“支持,可靠性和验证”而受到重视的软件。 但是,最近的历史使得将专有软件与可靠性或功能性结合起来变得更加困难。

在开放源语言如何使诸如SAS之类的占主导地位的专有软件很大程度上无关紧要的情况下,R无疑提供了强有力的案例研究。 尽管很难量化R的用户群的规模,但一种有趣的流行度指标是其在学术期刊文章中的使用。 在该法院, R在2015年超过了SAS 。 此外,尽管这只是轶事,但有趣的是要注意到2017年关于Statistics subreddit的一个帖子,其中原始的发帖人想知道为什么SAS仍然大量存在。 为了解释普遍的React,公司仍然购买SAS,因为这是他们过去一直使用的,而且很难改变! 就像伍德罗·威尔逊(Woodrow Wilson)所说的那样:“如果想成为敌人,那就尝试改变一些东西。”

相反,有些开发人员和数据科学专业人员不想对功能进行任何让步。 他们想要用于分析的最佳工具,即使这意味着必须时不时地挖掘Stack Overflow。 对于他们来说,这里有R。它最初是一个统计计算环境,但由于添加了太多内容,现在可以将其归类为通用语言。

那Python呢?

ggplot2已移植到Python; Jupyter笔记本有支持R的实现; 和DataFrame在Python的类大熊猫库具有一种不可思议的概念相似性的data.frame在基R.类因此,现在是很不常见的用于数据科学家,使R和Python的之间的选择是考虑不同功能的。 此规则有例外,例如(对Python有利)和Python的全栈功能,(对R有利)Shiny(作为R库实现HTML和JavaScript API)实现了Web应用程序之间的无缝集成开发和R的能力。

相反, Python呢?” 要弄清楚R和Python之间的对比设计哲学,然后选择最符合您个人风格的设计哲学,就可以最好地回答这个问题。 两种语言之间最大的概念差异是Python偏爱只采用一种明显的方式来做某事( Python哲学中的一条规则),而不是R相信为程序员提供无限可能性并允许他们选择所需的方法的信念。 在R社区中,肯定没有与Python社区中使用“ Pythonic ”一词类似的东西。 R相信给程序员更多选择,而不是提倡有条理的方法。 虽然这当然是个人喜好问题,但我认为它使R比Python更紧密地与开源社区所秉持的价值观保持一致。

选择R的三个原因

归根结底,只要实用程序能够满足他们的需求,程序员就应该选择自己觉得最舒适的语言。 我喜欢R语法非常接近我的想法,这使我使用起来很舒服。 考虑这三个简单但说明性的示例。

  1. R的索引从1开始,而不是通常的0。 出于这个原因,我的一位同事甚至更喜欢Python而不是R。 但是,编程语言的重点是成为我们思维与1和0之间的中间人。 如果一种语言是更有效的“中间人”(例如,从1开始,以同样的方式进行计数),那么这有什么问题呢? 我通常会遵循以下约定,除非有充分的理由不这样做。

    R的索引方法的另一个好处是,您可以通过对子集使用负索引进行子集删除(这要求语言从大于零的内容开始进行索引),从而从向量中删除元素。 例如:

    
    
         
         
    > x = 1:5
    > print(x)
    [1]
    1 2 3 4 5
    > x = x[-3]
    > print(x)
    [1]
    1 2 4 5

  2. 基数R有四个不同的赋值运算符,每个赋值运算符在操作顺序上具有不同的排名。 以下四个语句均产生相同的效果:
    
    
         
         
    assign('x', sqrt(pi))
    x = sqrt(pi)
    x <- sqrt(pi)
    sqrt(pi) -> x
    上面的第三个运算符(称为“向左赋值”)是最常见的,如果大多数R程序员(出于习惯)仅使用它,我也不会感到惊讶。 我发现将所有这些可用都很有用,因为我认为某些选项更适合表达我如何形成某些想法。 同样,第一个可选参数, assign()函数可以显式指定在哪个环境/名称空间中存储新变量。 此外,R具有超级赋值运算符<<-->> (分别平行于向左和向右赋值),这些变量允许全局存储变量,甚至在嵌套函数或结构内部。 (这也可以通过assign()函数来完成。)
  1. 我认为R在轻松实现列表理解方面胜过其他所有语言,即使这通常被吹捧为Python的卖点。 R中的几种列表理解方法之一是“ apply ”函数族,它提供了一种功能丰富的方法来跨向量或列表应用函数(即,R等效于C结构)。 还有一种基于R的“回收”约定的更简单方法,该方法要求即使声明一个函数仅具有一个输入元素,也可以将整个矢量传递给该函数,并且将在每个函数处对函数进行求值。向量的元素。 例如,factorial()函数被定义为仅接受输入的一个元素,但是您仍然可以将其用作:
    
    
         
         
    > factorial(1:9)
    [1]
    1      2      6     24    120    720   5040  40320 362880

    尽管“应用”功能最初被认为是R中的细微差别,但它们无意间鼓励R程序员以尴尬的并行方式设置其计算。 因此,R社区自然开发了用于并行和GPU计算的库。

通过这些以及许多其他方式,R对开放源代码哲学的拥护使它成为一种利基但不断发展的语言,其功能可以与任何其他高级解释语言相媲美。


Samuel Lurie 将于 今年3月8日至11日在加利福尼亚州帕萨迪纳市的SCaLE16x 上展示 R的亮点 要参加并获得50%的门票,请使用促销代码OSDC进行 注册

翻译自: https://opensource.com/article/18/3/r-programming-features

人望山 鱼窥荷下一句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值