打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
介绍新LAMBDA函数
userphoto

2023.01.29 四川

关注

新的LAMBDA函数有助于创作可重复使用的LAMBDA函数,同时其本身也是独立的函数。
LAMBDA作为参数
Excel公式语言的一个令人兴奋的补充是,LAMBDA现在通过添加新函数,展示了被视为可接受的值类型的能力。这是一个在许多编程语言中都存在的重要概念,一般来说,这等同于lambda函数的概念。
Lambdas作为值
在深入研究新函数及其工作方式之前,了解函数作为值的概念很重要。
在过去几年中,我们一直在教Excel如何理解新的值类型。最近添加的一些是数据类型(WolframGeographyStocksPower BI,甚至Power Query都可以创建数据类型)和动态数组。Lambdas通过允许Excel将函数理解为值来继续扩展。这是通过引入LAMBDA实现的。这意味着以前几乎不可能或艰巨的事情现在可以通过编写LAMBDA并将其作为值传递给函数来实现。
例如,假设有一个不断增长的值列表,检查大于50但小于80的值,生成一个布尔值列表,如下图1所示。
1
可以为每个值编写一个函数来检查条件,但这很容易出错,并且需要为一些非常基本的内容进行大量复制。作为参考,重复的公式可能如下(每个值有一个公式):
=AND(B3>50, B3<80)
=AND(B4>50, B4<80)
...
这是一种可以应用LAMBDA的场景,更具体地说,这是一个使用新MAP函数的绝佳示例。
MAP
使用MAP,可以轻松地创建LAMBDA,它将公式应用于每个值并返回结果。MAP的超能力是值转换。
公式如下:
=MAP(1[],LAMBDA(value, AND(value>G3,value<G4)))
结果是一组布尔值,如下图2所示。
2
只需一个公式,就可以实现相当强大的功能!
该函数如何工作
新的MAP函数接受一个(或多个)数组/区域引用,并将提供的数组/区域中的每个值作为参数传递给LAMBDA函数(在本例中为表1[])。LAMBDA接受来自MAP的参数这一事实是在检查每个新函数时需要记住的一个重要概念,因为每个新函数都不同。
在上面的例子中,有一个数组,因此LAMBDA非常简单,只需要一个参数。
集中于LAMBDA本身,可以看到,在这个示例中,选择将单个参数称为“value”,但可以使用任何合法参数名称来调用它:
LAMBDA(value, AND(value>F2, value<F3))
使用这些新函数,需要理解的另一个关键概念是,Excel将对提供的每个值进行计算,然后让LAMBDA完成繁重的工作。在这种特殊情况下,它将返回一个结果数组,但这里介绍的其他函数将只返回一个值。
REDUCE
虽然MAP被证明对转换值列表很有用,但假设想计算满足条件的项数。
这就是REDUCE派上用场的地方。
这一次,重复使用与之前相同的逻辑,但将计算包装在IF中进行计数。与之前一样,公式非常简单,因为只需要一个函数调用:
=REDUCE(0,1[],LAMBDA(accumulator,value,IF(AND(value>G3,value<G4),1+accumulator,accumulator)))
结果如下图3所示。
3
通过使用LAMBDA将值列表缩减为一个值。
REDUCE的主要区别在于,它在LAMBDA值中使用了两个参数:
accumulatorREDUCE和每个LAMBDA调用返回的初始值。
value:提供的数组中的值
另一个需要注意的是第一个参数,它是accumulator[initial value]。在例子中,指定为0
accumulator允许编写自己的自定义聚合IF函数(甚至可以使用REDUCE编写PRODUCTIF),如果集中于LAMBDA的计算部分,可以看到:
IF(AND(value>G3,value<G4),1+accumulator,accumulator)
BYROWBYCOL
接下来要介绍的两个函数是BYROWBYCOL。这些函数接受一个数组或区域,调用lambda,并将所有数据按每行或列分组,然后返回一组单个值。
这两个函数很好,因为它们允许进行以前不可能的计算,它们会产生数组。
例如,假设有一些追踪一周中每一天的温度数据,想要看到一周平均气温高于85华氏度的日子。如下图4所示。
4
如果没有BYROW,将需要创建一个辅助列,并使用一组公式计算平均值,然后可能使用筛选或其他一些功能。
使用BYROW,可以创建一个满足约束条件的LAMBDA,然后将结果传递给FILTER函数。
公式如下:
=FILTER(2, BYROW(2,LAMBDA(week, AVERAGE(week)>85)))
结果如下图5所示。
5
现在,假设希望看到以摄氏度为单位的数据。可以通过使用MAPCONVERT来包装我们的调用,以摄氏度为单位进行快速更新并获得结果:
=MAP(FILTER(2, BYROW(2, LAMBDA(week, AVERAGE(week)>85))), LAMBDA(value, IF(ISNUMBER(value), CONVERT(value, 'F', 'C'), value)))
结果如下图6所示。
6
完整的函数列表
下面是LAMBDA新函数。
MAP函数,通过应用lambda创建新值,将数组中的每个值映射到新值,返回一个数组。参数array1,要映射的数组;参数lambda_or_arrayLAMBDA,必须是最后一个参数,并且必须为传递的每个数组或要映射的另一个数组指定一个参数。LAMBDA参数,array1:从array1中的值,array2:从添加数组中的值……
REDUCE函数,通过对每个值应用LAMBDA函数并在累加器中返回总值,将数组缩减为累加值。参数initial_value,为累加器设置开始值;参数array,要缩减的数组;参数lambda:被调用以缩减数组的LAMBDA,该LAMBDA接受两个参数,累加器和值。LAMBDA参数,accumulator:从LAMBDA中返回的值;value:从数组中的值。
SCAN函数,通过对每个值应用LAMBDA扫描数组,并返回具有每个中间值的数组。参数initial_value:为累加器设置开始值;参数array:用于扫描的数组;参数lambda:被调用来扫描数组的LAMBDALAMBDA接受两个参数,累加器和值。LAMBDA参数,accumulator:从LAMBDA中返回的值;value:从数组中的值。
MAKEARRAY函数,通过应用LAMBDA函数,返回指定行和列大小的计算数组。参数rows:数组的行数,必须大于0;参数cols:数组的列数,必须大于0;参数lambda:被调用以创建数组的LAMBDA,该LAMBDA接受两个参数,row_indexcolumn_indexLAMBDA参数,row_index:行的索引;column_index:列的索引。
BYROW函数,将LAMBDA应用于每一行并返回结果数组。参数array,按行分隔的数组;参数lambda,一种将一行作为一个参数并计算一个结果的LAMBDALAMBDA参数,value:从数组中的值。
BYCOL函数,将LAMBDA应用于每一列并返回结果数组。参数array,按列分隔的数组;参数lambda,一种将列作为单个参数并计算一个结果的LAMBDALAMBDA参数,value:从数组中的值。
ISOMITTED函数,检查值是否丢失,并返回TRUEFALSE。参数argument,想要测试的值,例如LAMBDA参数。
可选参数
LAMBDA现在支持可选参数。要使用可选参数,只需将可选参数名称放置在“[]”中即可。例如:
=LAMBDA(param1, [param2], IF(ISOMITTED(param2), param1, param2))
如果省略param2,则此lambda将返回param1的值,否则返回param2的值。
注:本文学习整理自微软官方网站,供参考。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【BYROW函数】对数组的每行运算,并返回结果数组。
67这才是Excel有史以来最复杂也是最强大的函数,没有之一!
MAP函数用过没?
另一个视角看Excel中的MAP/REDUCE/SCAN等函数:详说Excel函数式编程中的循环控制结构
扒出一个Excel神技巧:按指定的条件重复数据!
Vlookup函数实例(全)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服