首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

R语言 Again—function也不难

我就在这里,不离不弃

——A·May

R-71T-83

function其实也没有那么难May2018年1月27日

  最开始,我以为的自定义函数都是要自己写类似于高数一样的东西,后来随着接触的自定函数越来越多,我才发现,其实那种东西人家已经写过了,就是我们了解到的系统函数,包括常用的数学函数、概率函数、统计函数、矩阵运算函数和字符串函数。而我们所需要做的就是了解这些函数,然后,可以利用for的循环语句和ifelse等条件语句做出能够实现我们计算目标的自定义函数,最后再将自定义函数运用到apply族函数中,实现计算功能。

  这一点请注意!其实apply函数就是将function的功能以某种规则(行列变量)循环应用到数据上,这种循环比for或者while的效率更高,而且不用先写for的循环语句,这为我们提供更大的便利。

1.最简单的function函数,你想到了吗?

  为什么说这个是最简单的函数了呢?不是下回分解…哈哈,不好笑。这个是adply函数,参数格式为adply(data,1/2,function),在这里,我计算的是选择出Sepal.Length大于等于5且种类是setosa的花,当然我们也可以用subset(iris,Sepal.Length>=5.6&dat$Species==“setosa”)做出来,而且一点毛病没有,重点在于对function的理解。

  首先是function(dat)中的dat的设置,这个参数是根据计算对象而来的,写到这里dat并没有什么实际意义,你也可以换成是sub或者就是x,没有问题。重点是iris与dat Sepal.Length>=5.6&dat Species==“setosa”之间的计算关系,这点搞清楚就好了。我们其实是iris中的数据按行(1)循环放入到function中去计算,而function的功能是按照iris的变量去条件运算。

  也就是说dat Sepal.Length实际上在运算过程是等价于iris Sepal.Length的,并且,在function中并没有其他循环函数或者数学函数。所以,只要你能领悟dat和iris的等价关系,那就可以写出这样的最为简单的自定义函数。

2.加上有一个简单的函数mean

  这里这种分组计算,我以前说过用sqldf的groupby分组计算完成,的确可以。但是领悟到了iris(数据)和function(x)中的x的关系的时候,我发现使用ddply的确是足够便利。这种便利不仅体现在计算上,而且体现在ddply、melt和ggplot2的三个函数的使用上。

3.上面那两个没有看够的话,这里还有

  list.lifes使用批读取文件夹中的文件的函数,如果你有100个文本,每10个文本存放在10个文件夹中,这样你就需要先用list.files读取最大的文件夹,还要分别读取10个子文件夹,这样的话我们就需要一个小循环。

参考阅读

学习数据挖掘交流平台

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180127G0QJWJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券