r - 将 mutate 与 map2 和 exec 一起使用,而不是 invoke_map
问题描述
“R for Data Science”中的此示例使用invoke_map
现已停用的内容。
sim <- tribble(
~f, ~params,
"runif", list(min = -1, max = 1),
"rnorm", list(sd = 5),
"rpois", list(lambda = 10)
)
sim %>%
mutate(sim = invoke_map(f, params, n = 10))
如果我分别提取列,那么它适用于map2
和exec
map2(sim$f, sim$params, function(fn, args) exec(fn, !!!args, n = 10))
但是,我无法mutate
与map2
和exec
sim %>%
mutate(sim = map2(f, params, function(fn, args) exec(fn, !!!args, n = 10)))
我收到错误“错误:无法拼接闭包类型的对象,因为它不是向量”
有人能帮忙吗?
解决方案
!!!
运算符优先于匿名函数的创建。因此,它会args
立即在数据框的范围内进行评估,如果没有找到这样的列,则会在全局范围内进行评估。一种解决方案是将函数定义移到map2
调用之外:
myfun <- function(fn, args) exec(fn, !!!args, n = 10)
sim %>%
mutate(sim = map2(f, params, myfun)) # Now works
另一种解决方案是将函数名称和所有参数连接到一个列表中,然后将该列表传递给exec
它的域提升:
sim %>%
mutate(temp = map2(f, params, c, n=10),
sim = map(temp, lift(exec)),
temp = NULL)
推荐阅读
- android-studio - 无法使用 Flutter 中的测试包运行测试,Android Studio
- vim - 维姆维基:
ww 与 E486 重新映射的领导者错误:找不到模式:\<:nnoremap\> - powershell - Windows 终端 - 使用不同的配置文件启动 powershell
- tcl - 如何在 tclsh 中执行命令替换?
- sql - MS Access 更新查询,从 table1 中选择列并更新 table2 中的行
- javascript - 访问 JSON 值时出现“未定义”
- html - 如何赋予 textarea 与其兄弟内联块图像相同的高度?
- cmake - 从 CMakeLists 更改 CMakeCache 变量
- c# - MVC Core 3.1 与 Quartz 上的托管服务每 1 小时安排一次不启动
- vue.js - 来自本地机器的 v-binded 图像不会显示,但来自 web 会