Heterogeneity 借用全局变量,可以极不雅观地实现: a=lapply(1:10, function(x) matrix(sample(1:50, 18, replace=T), nrow=3)) # 准备好存储结果的同型矩阵 sum=matrix(0, nrow=3, ncol=6) # 暴力转存每一步的中间结果 lapply(a, function(x) x+sum ->> sum) # 结果 sum
yihui Heterogeneity 你呀你,叫我说啥好。几年前我说湘云版主穷折腾,那时候是冤枉他了,这次说你穷折腾应该是不冤枉了吧。你看你捣鼓了大半天,不就是在重新发明 Reduce() 的轮子吗?你链接的两个 SO 答案里的一楼都是叫你用 Reduce(),一行代码,干净利落,这函数就是为了解决你这种问题而生的。你这个极不雅观的实现虽然不雅观(离雅观只差一小步了),但基本意思就是 Reduce() 的意思:把一堆肉丸子一个个穿上烧烤签子。 还有,Reduce() 是基础 R 函数,盘古开天辟地之时起就存在了,不是净土宗的发明。这大概又是一例净土宗强力宣传攻势导致基础 R 里的千里马的埋没——世人皆知 purrr::reduce() 却鲜有人知道已经存在了二十年的 base::Reduce()。
Heterogeneity yihui 哈哈哈哈哈哈哈哈哈哈…… 我真的不知道base::Reduce()!!! -- 我还心想说看table、split这样的原生函数用起来多顺手啊…… R是任tidyverse打扮的小姑娘。 你说base::Reduce()首字母大写干什么!不就是让人谋朝篡位的麽……
yihui Heterogeneity 你说base::Reduce()首字母大写干什么!不就是让人谋朝篡位的麽…… 这是一系列函数。我的猜测是因为小写版本的 map()、find() 和 filter() 都有对应的函数了,为了避免混淆,这一系列函数都大写,所以 Reduce() 只是为了一致性而牺牲的羔羊。这种牺牲你要是不理解的话,就想想净土里的 filter() 以及 select() 函数因为与 stats::filter() 和 MASS::select() 冲突而坑了多少爹,而它们的作者为了解决这种坑爹无数的冲突又后续制造了多少魔法。 所以当你走到一条看起来奇怪的路上时,直觉可能会想这是哪个王八蛋修的路怎么这德性,而路边都是你一眼看不见的沼泽地,你要么走这条奇怪的路,要么掉进泥潭。按达里奥说的:你最好总是假设自己没有看到全部。当然这是很难的,我也不例外,容易在心里骂那个修路的缺德鬼。
Heterogeneity lovebluesky 刚刚读完了第一遍,断断续续花了两年。套用《时间简史》的书签上那句话就是“懂与不懂都是收获”。 不准备重新读Advanced R,但是准备读它的第二版,也算是螺旋式上升吧。
yihui Heterogeneity 系列函数看帮助文档:?Reduce 这里的系列指的是"函数应用函数"的系列,也就是所谓的高阶函数。 我没有推荐的教材。我的 R 主要是野路子学出来的,而不是通过看教材,我好像一本 R 书都没通读过。
lovebluesky Heterogeneity 我觉得第二版不叫advanced R ,应该叫 Advanced tidyverse 更合适,当然我可能说的比较片面,因为我可能就两三年前看过,对我来讲,感觉不如第一版实用。
Heterogeneity yihui A heuristic approach indeed... By the way, I am expecting a hyperlink under "there was one exception" but it seems there wasn't one. Lol.
yihui Heterogeneity 我修改了一下那篇日志;我本来指的是 John Maindonald 的那份短文档 "Using R for Data Analysis and Graphics"