c coders 写 r 的最大两个问题,一个是数学功底和数据库功底不够,无法从数学模型 的角度和数据表的框架去思考问题,一个是对 r 的底层实现的理解不够深刻,不知道 该如何优化。写出来的code 不但效率惊人的低,而且冗长,难以维护,bugs 很多。比 如说不敢用循环,而是滥用 apply,是中级用户的一个显著特点。 对于 c coders,就举一个简单的例子:names。r 的原则之一就是万物有名。大量使用 names 来做 indexing,这是哲学上的不同。这也是 c coders 很难真正从理念上理解 和掌握的地方 -- 虽然常用的 tricks 很快就熟悉了。其它的比如说 factor 的使用, 模型的构建,等等,不熟悉的话,连 ggplot 都很难用好,更不用说如何在自己的软件 中正确高效的重载了。 而稍微 intense 一些的 r package 就要用 c 来写一些关键组份了,所以专业的 r coders 的 c 还是很扎实的。比如说,要充分利用 phi 处理器通过 offload 来提高 openmp 的效率,很多小函数就要用 c 或者 fortran 来写,那个效率可是数量级的上 去。所以不擅长 c 就很难成为好的 r developer,虽然如果对底层足够熟悉,知道如 何优化 r codes,就已经足以成为好的 r users 了。