R语言拦路虎系列,遇到function就困难重重?浅谈function相关的一些经验
想要保证高效的生产力,硬件得给力(比如:
一台关键时候不会卡顿的电脑
一个灵敏度和手感都还可以的鼠标
一把可以带来欣快感的键盘
一个续航和音质都还可以并且还可以降噪的无线耳机
etc.)之外,剩下的就得靠知识了。
知识的积累是漫长的过程,我们应该在这个过程中寻找对的方法,让我们从初出茅庐到略有小成的路途尽量的直,避免不必要的弯路,这个系列会不定期投送经验,本期内容是R中function相关的一些分享。
正文:
function的本质是文本替换
function可以在R中无处不在,如之前文章提到的read_excel()和write.csv,又如base中自带的mean()和median()等,这些统统都是function。所以function可以理解为是为了解决某一问题或者某一系列问题而打包好的一系列语句。感觉就如中学数学中的几元几次方程,输入x值就会得到特定的y值。
function的来源主要分两个。
一个是别人写,即存在与base中或者是其他package中别人已经写好的函数。
另一个是自己写的,也叫自定义function,可以根据自己的实际要解决的问题,针对性的写一个满足个人特定需求的一段代码并打包在function语句中,生成自己的function。如何自己写一个function,以及写出来function能解决问题的水平,和function本身的语法句法内容,一定程度上可以反应或者检验当下编写者的代码水平。
function的语法组成,固定语句+参数们+解决问题的代码们。就分这三大部分,需要研究是第二和第三部分。
如何写一个自定义function。大概分以下几个步骤:
第一,明确写function的目的。有没有替代方法,是否真正需要自定函数来解决问题。考虑性价比,是否真正的有必要去自己花时间开发一段代码,有没有各位神仙前辈已经就类似的问题开发了不错的包可以直接调用。等等。再确认确实需要写之后,那就开始开发代码吧,其实过程是很快乐的。
第二,写function的思路。分而治之,各个击破,再一统山河。问题通常都没有那么复杂,之所以变得很复杂一般是因为思路比较混乱。可以将问题拆分,分别去解决实现,最终整合结果就ok了。如果反而把问题变得更复杂,就属于本末倒置,得不偿失了。
第三,写function的步骤。大体如下,
1: 就写一段可以解决目标问题的代码,即“硬”代码。
2:对代码进行精简,提炼。
3:对“硬”代码中的关键data或者variable用参数代替,实现文本替换。
4:对生成的自定义function小范围测试。
5:根据实际环境,模拟可能遇到的真实情景,大规模测试function的弹性和效果,并微调。
第四:需要注意的事项。
1:尽可能的少用循环,循环会拉低运行效率,尤其是数据量很大的时候,会慢的感人。
2:尽可能精简语句,减少冗余代码,不要拐弯抹角,这样对自己或者对于阅读代码的人都好。
3:可以尝试在代码中调用其他package中的函数,提高效率,事半功倍,站在巨人肩膀上看得更远。
4:如果考虑未来的可扩展性,尽量在编写的过程中就留足余地,中间步骤避免使用一些硬文本,尽量使用可以自动运行得到结果的代码。
5:参数要精而优,设置前需三思。
就像SAS大佬们疯狂开发自己macro一样,R大佬们也在疯狂开发自己function。大佬们的世界总是那么疯狂。
近期会整理一些资料,计划录一些视频,跟大家分享一下代码实操的盛况,哈哈。
以上仅供各位参考,具体需求请具体分析。
不足的地方还请包含指教。感谢。
以上内容仅供学习参考。
往期精彩干货文章链接