如何获取purrr包中部分应用函数的绑定参数值?
嘿,这里有几个更简洁优雅的方案来提取foop中参数a的取值,比你当前的方法更紧凑:
先回顾你的场景代码
library(purrr) foo = function(x, a) x + a foop = partial(foo, a = runif(1)) # 你当前的实现 e = as.list(environment(foop)) rlang::eval_tidy(e$args$a) # [1] 0.05872499
方案1:省去转列表的直接访问
rlang::eval_tidy(environment(foop)$args$a)
直接抓取foop的闭包环境,取出其中的args列表里的a项再求值——这一步砍掉了将环境转为列表的冗余操作,代码更紧凑。
方案2:如果a是已固定的求值结果(大多数场景)
如果你的a是像示例中那样,在创建partial时就已经被求值的(比如runif(1)在生成foop时就产出了固定数值),那甚至可以跳过eval_tidy,直接取值:
environment(foop)$args$a
因为purrr::partial默认会立即求值你传入的参数值,所以environment(foop)$args$a已经是最终的数值,不需要额外求值步骤。
方案3:rlang风格的简洁写法
如果你习惯用rlang的工具链,也可以这样写(适合动态获取环境变量的场景):
rlang::eval_tidy(rlang::env_get(environment(foop), "args")$a)
内容的提问来源于stack exchange,提问作者jakob-r
相关产品推荐
相关产品推荐

