美文网首页R语言编程进阶
R: Reduce 累积迭代函数

R: Reduce 累积迭代函数

作者: 生信云笔记 | 来源:发表于2020-08-12 20:49 被阅读0次

  R语言作为数据的工具还是很受欢迎的,因为它内置了很多好用的函数,如果没有内置的函数也会第三方的包可以用,这使得R对初学者来说很友善,学习成本不高。做数据处理有时候需要使用循环,在R中有好多函数可以用来替代循环,如apply家族的函数。但今天我想说一下的是Reduce函数,那么这个函数可以用来干什么呢?下面来说一说。

  首先Reduce接受一个向量或者列表,然后需要指定一个操作函数(自定的也可以),这时Reduce函数第一次会将第一个元素直接返回,第二次将返回的结果和向量或列表的第二个元素一起传递给操作函数,如此类推一直到最后一个元素。
那么这样的函数有什么用呢?这里说两个适合使用的场景,用起来可以省去很多事,一是累积求值,二是多个列表求交集。

  • 情况一,比如1-100累积和,结果也就是1,1+2,1+2+3.....。示例代码如下:
#创建一个向量
> c1 <- seq(1:100)
> c1
  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
 [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
 [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54
 [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
 [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
 [91]  91  92  93  94  95  96  97  98  99 100
#该函数默认只返回最后一个值
> Reduce(sum,c1)
[1] 5050
#想返回所有的值需要开启accumulate参数
> Reduce(sum,c1,accumulate=T)
  [1]    1    3    6   10   15   21   28   36   45   55   66   78   91  105  120
 [16]  136  153  171  190  210  231  253  276  300  325  351  378  406  435  465
 [31]  496  528  561  595  630  666  703  741  780  820  861  903  946  990 1035
 [46] 1081 1128 1176 1225 1275 1326 1378 1431 1485 1540 1596 1653 1711 1770 1830
 [61] 1891 1953 2016 2080 2145 2211 2278 2346 2415 2485 2556 2628 2701 2775 2850
 [76] 2926 3003 3081 3160 3240 3321 3403 3486 3570 3655 3741 3828 3916 4005 4095
 [91] 4186 4278 4371 4465 4560 4656 4753 4851 4950 5050

比起写循环来完成,这样求累计和是不是更方便快捷。下面再来看看另一种情况。

  • 情况二,如有多个列表求交集,示例代码如下:
#创建三个向量
> c1 <- letters[1:5]
> c2 <- letters[3:8]
> c3 <- letters[5:11]
> c1
[1] "a" "b" "c" "d" "e"
> c2
[1] "c" "d" "e" "f" "g" "h"
> c3
[1] "e" "f" "g" "h" "i" "j" "k"
#三个向量的交集
> Reduce(intersect,list(c1,c2,c3))
[1] "e"

  求向量的交集是不是很方便,也许你可以选择嵌套intersect的方式来完成,当然可以用嵌套intersect来解决,可是我这里只是求3个向量的交集,如果是求100个向量的交集呢?如果还用嵌套intersect方法,那你得写循环解决了。而Reduce可以替代循环更省时省力,何乐而不为呢?

最后

  emm,今天就分享到这里,R语言的作为高级语言有很多现成的函数可用,使用起来也是相当的简单,多了解一些以后使用起来会很方便。

相关文章

  • R: Reduce 累积迭代函数

      R语言作为数据的工具还是很受欢迎的,因为它内置了很多好用的函数,如果没有内置的函数也会第三方的包可以用,这使得...

  • Swift 高阶函数

    高阶函数之Reduce public func reduce(_ initialResult: R...

  • python——reduce()函数与np.cumsum()函数

    在python3中如果使用reduce()函数需要先导入 reduce函数会对参数序列中元素进行累积。与 map ...

  • 匿名函数4(实战)

    匿名函数4(实战) reduce reduce() 函数会对参数序列中元素进行累积。 将一个数据集合(链表,元组等...

  • JS-day3 +闭包

    map 函数 : 数组利用map函数迭代执行函数,高度抽象化,简化流程 reduce方法 ************...

  • Kotlin开发知识(二)

    高阶函数 传入或者返回函数的函数 1.常见高阶函数 forEach map flatMap reduce 累积数据...

  • 5、数组方法

    建议使用高阶函数例如 map() 和 reduce() 替代 iterators(迭代器)

  • python之reduce()

    1.reduce()函数会对参数序列中元素进行累积。 函数将一个数据集合中所有数据进行下列操作:用传给reduce...

  • 由对象组成的数组去重方法

    1.定义数组对象: 2.使用数组的reduce()方法 reduce()方法:接收一个函数作为累积器,数组中的每个...

  • python 学习日记4(reduce ,filter(有坑),

    1. reduce(函数,序列): 将序列以迭代的形式用函数处理. 示例程序: 有一个列表A,里面全是数字,把A里...

网友评论

    本文标题:R: Reduce 累积迭代函数

    本文链接:https://www.haomeiwen.com/subject/rwpzrktx.html