Heterogeneity 人们对 <<- 最常见的误解就是以为它是全局赋值符,但它并不是,它只是上层赋值符。如果一个对象在上层环境中不存在,那么接着到上上层中找,一直找到全局环境。如果全局环境中也不存在,R 会在全局环境中创建这个对象。

说实在的,我觉得你有点管道中毒的感觉,这里用管道实在是毫无价值,反增疑惑。本来是个非常简单的赋值操作:

k[2*i, 2*j + c(1, 3, 4)] = rnorm(1)

却被写得如此诘屈聱牙:

(2*j) %>% {k[2*i, c(.+1, .+3, .+4)] <<- rnorm(1)}

就像好好的一句主动语态的句子,硬用被动语态表达出来一样:

我今天中午吃了一碗饭。

一碗饭今天中午被我吃了。

这碗饭实在让人噎得慌。一个普通 R 用户看见你的一行代码至少得问四个问题:

  1. %>% 是什么?
  2. . 是什么意思?
  3. <<- 是什么操作?
  4. 为什么要用花括号?

每个问题都不容易回答,涉及到深层技术细节。

另:你加入论坛晚,不知道大名鼎鼎的颜大站长 @yanlinlin82 很正常,早年间很活跃,是 COS 的大功臣,可惜现在跟众人一样误入微信歧途了,只在微信上回答问题。

    yihui
    (1) 谢谢你告诉我<<-的正确名称,我把这篇帖子相关的地方都改一下吧。

    (2)看了《管道中毒》,五味杂陈……可能是因为R语言的开放吧,所以想把一件事情弄明白反而无比繁琐,成本极高……你指出的四个问题,除了第一个,都是我各处搜或者找人问得到的答案,限于场合或者面子学到的也是一知半解。这么学来的东西不可能以最简洁优雅的方式呈现,只能是补丁摞补丁。

    (3)所以在这里冒天下之大不韪,我在很长一段时间内都是喜欢Matlab完胜过R的,至少人家的帮助文档风格整齐划一,文风清晰好懂。反观R的帮助文档,都是捏着鼻子看。

    (4)大神你给出的方案确实漂亮。服。

    (5)谢谢提点,我觉得还是要感谢一下颜大站长。

      Heterogeneity 更改标题为「【已解决】通道运算符与向量切片

      yihui dapengde 我歪个楼,看到这样的发帖是赏心悦目的,对于经常逛论坛的人来说,自然优先回复,因此,我想怎么标记这种正确的发帖姿势,因为下次遇到很不规范的发帖,就可以从这些规范的发帖中随手选一则过去,可能比起让他去看左上角新手须知好很多,感觉总有人没有耐心规范发帖,比如这贴

      可能立马有人要跳出来反驳我了,你不回就是了,我就这么发帖,毕竟怎么发帖和回帖都没有强制性的规则,比如这贴

      5 天 后

      管道操作必须与纯函数,向量式编程三者联合起来实现数据流编程,才是正确的使用姿势,只需很简单的几个基本组件就可以了,很简单,

      另外,管道是正向前进的顺序结构.

      可以参考一下我的博客PurefunctionPipelineDataflow

        Heterogeneity

        他那博客我看了,通篇比喻来比喻去然而言之无物,拿一堆自造的"看上去很专业"的专有名词堆砌而成。
        通篇就这种感觉:

        FP和OO过度复杂了,在大工业上是行不通的,还是属于手工作坊那种强调个人技术的生产方式, 个人技术极大影响了产品质量,极不可靠的生产方式。FP和OO其实全是在走弯路, 花拳秀腿,花样作死。

        大概率是个民科。不过计算机的民科我还是第一次见…


        搜了一下,这么想的人看来不止我一个:

        拿这篇小文章到处贴来贴去不过反应寥寥

        https://news.ycombinator.com/item?id=18844310

        https://clojureverse.org/t/warehouse-workshop-model-update-the-pure-function-pipeline-data-flow/3729/2

        https://news.ycombinator.com/item?id=18967811

        https://news.ycombinator.com/item?id=18967837

        还在wikipedia里加了个链接,这应该算是原创研究吧,wiki不欢迎的那种

        https://en.wikipedia.org/wiki/Dataflow_programming

          @tctcab
          至少我用这种方法构造了一个几万行的项目.
          构造了从clojure到R语言基于语法树的DSL,
          是来自实践的总结, 我博文里讲得很清楚了,
          也有范例代码, 如果有问题可以具体提出,
          我会回答的,泛泛地提问我不知从何说起.

          另外,想象力很重要.搞分析的人思维不要太江化:-)
          以前在Clojure群,有人说我神棍, 据我发现, 都是
          初级人员.

          真功夫很简单, 小文章就够了, 搞套路, 花拳秀腿
          是玩杂耍的

          原来wiki不喜欢原创, 原创不受欢迎是第一回听说.

          Heterogeneity
          我这几天在编写markdown文学编程的notepad++
          pythonscript脚本,沉浸在各种选型组合和写代码,
          不能自拔,我有四个专业要学习讨论, 一个
          业余项目, 还有工作, 我很忙, 这个论坛我是好几天
          来看一下的.

          @Cloud2016 是太云吗? 太云以前帮过我,是我尊敬的
          专业人士, 对于帮助过我的人我都记在个人项目的感谢榜上,
          不敢怠慢.

          我认为R语言向量式编程就够了,这也是数据流编程.
          统计本是以数据为中心, 用数据流处理最是合适,
          我对R语言OO派更流行不可理解, 倒是Clojure语言上数据流更流行,

          R操纵数据的库五花八门,就象玩套路一样, 不可思议, 基本上在Clojure
          上我只用核心函数中的几十个集合函数.对于数据操纵,我更倾向于
          使用核心函数千锤百炼地运用, 这对提高数据建模能力很有帮助,
          喜欢五花八门库的人,倾向让数据模型适应这些库, 然后模型是很烂的.

          比如, ggplot2很成熟,有很多扩展, 我选用它做可视化, 但它的OO式理念
          我个人不是很赞同, 我更喜欢vega-lite这种数据驱动的可视化库.

          纯函数只有输入输出, 就象是自来水管, 通道运算符就象是转接头,
          连接纯函数,这是基本式, 对于序列类型数据, 用map, reduce, apply,
          filter等高阶函数进行处理, 避免循环状态,数据,处理逻辑混杂在一起,
          即不清晰, 打断了数据流, 也难以并行处理.我的项目几万行没有任何
          显式循环代码段, 尾递归也只有一个.

            对我来说,整个R系统就是一个类似RMDB的数据分析服务器,R语言我是以clojure数据表示的DSL,当成数据来操纵组合,使用时,和clojure数据一起组合变换,只使用分析函数和可视化函数,很难看出是R语言了:-)

            lincpa 不是!我沾了太云的光了,此处真想把太云 Call 出来,你的粉丝来了!

            1. OO 这套东西确实用在复杂的系统上, R 里面一切皆对象,R 继承自 S 语言,扒扒它的历史就会知道,它几乎就是为 处理数据而生 Rick Becker 在 UseR2016 的演讲 --- forty years of S 设计 S 和 R 系统就使用了的 OO 的,只不过用户用起来不需要动不动就写类什么的,这应该归功于封装还是什么?(小白一枚,楼上各位大神赐教啊)

            2. R 操作数据的包确实有很多,从数据导入导出,数据清理,数据变形,数据建模,数据可视化,数据报告,每一环都会有很多,但是对这个环境熟悉久了就会发现,好用的就是常用的那几个, tidyverse 确有优势,但我是基础函数党,能用基础函数操作数据的就用基础函数,因为它稳定,又不需要另外装包。

            3. 看到纯函数,我还以为复分析里的,吓一跳

              Cloud2016 我也倾向于基础函数。扩展包的函数总让我不太放心,其稳定性有时候完全取决于开发者的心情。万一遇见个任性的开发者可咋办。而且我不太理解,为啥有些功能在基础函数已经有了,而 tidyverse 却重写一遍,徒增学习成本。

              yihui
              几年前,我在数据可视化方案选型上在gnuplot和R摇摆不定,当时R的中文可视化资料不是很多,您在论坛向我推荐ggplot2,数据分析和可视化一体处理,对一个项目来说,选型很重要,选型错了,学习时间和开发时间会浪费很多,我可以用来开发个人项目的时间少,时间对我很重要,另外,你的那本现代统计图形对我帮助很大,我的可视化以这本入门,也最熟悉,DSL的大部分测试代码来自这本书。谢谢!
              (补充编辑: https://d.cosx.org/d/103518-103518 )

              几年前,我向太云讨要了他的最优化研究资料。