R语言 purrr::lift函数

本文介绍了lift函数,其变体lift_dl的功能,如何将函数转换为接受列表输入,与invoke的相似之处,以及tidyverse中rlang包的exec替代方法。重点讨论了在循环和函数参数转换中的使用场景。

lift函数作用:

        lift函数主要是作为函数的包装器/位置定位器,它通过将函数的定义参数的作用域从一种输入转化为另一种输入形式。例如lift_dl的意思是将函数参数的作用域的输入从...(dots)转化为列表输入。

函数:

lift(..f, ..., .unnamed = FALSE)

lift_dl(..f, ..., .unnamed = FALSE)

         对于lift函数来说,lift_dl是最常用的变体,因此lift本体函数与变体lift_dl的含义相同(其他的大概变体意思差不多就不说了)

        参数:

        ..f:是你想要转变输入域的函数对象。

        .unnamed:逻辑值,默认为FALSE,如果为TRUE,返回后的函数接受输入(列表,向量)时将不会按照名称(name)赋予参数,而是按照输入位置分配参数

        ...:给..f输入的默认参数值。

        后缀含义:

        d代表dots(...), v代表vector(向量),l代表list(列表),dl的意思就是从dots(...)取参数传值给函数..f 变为从list(列表)中传值给函数..f

例:

list(c(1:100, NA, 1000)) %>% purrr::lift_dl(mean, na.rm = TRUE)()

 将mean函数转化为能接收list的值的函数,并通过管道运算符传递。

个人想法:

        仅就以这个函数的dl变体来讲,这个函数的效果和invoke差不多。

        这行代码也可以达到同样的效果

        但是一些情况下例如需要循环的时候,可能会碰到使用lift函数。

purrr::invoke(.f=mean,.x=list(c(1:100, NA, 1000),na.rm=TRUE))

后续补充:

回头来看,这个方法和invoke的已经彻底被Hadley弃用了,要完成将列表转为函数参数的逻辑,tidyverse回归了rlang包下的exec方法。这个函数比baseR的do.call更友好,并支持类似python的**kwargs语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值