r - 多次调用函数而不重复(使用 %>%)
问题描述
假设我们有 3 个具有这个最小功能的函数:
func1 <- function (x) {
x + 1
}
func2 <- function (x, plus = T) {
if (plus == TRUE) {
x + 2
} else {
x - 5
}
}
func3 <- function (x) {
x + 3
}
我想使用管道 (%>%) 运算符将这个函数相互嵌套:
library(magrittr)
func1(0) %>% func2(plus = T) %>% func2(plus = F) %>% func3
# result: 1
这是它的等效版本:
func3(func2(func2(func1(0), plus = T), plus = F))
# result: 1
我尝试找到一种不需要复制 func2() 函数的方法(因为我必须多次运行它,而且我想动态地更改函数调用的数量和参数)。目前我不是应用函数或地图包的大专家,但我想至少其中一个可以完成这项工作。
这当然只是一个虚拟示例,我的真实代码要复杂得多,我只是尝试简化我的问题以找到解决方案。
我必须使用管道运算符,所以我只对也适用于管道的解决方案感兴趣。
解决方案
编写一个函数,将初始值x
和结果输入func2
并循环遍历这些结果:
func2_iterate = function(x, outcomes){
for (i in 1:length(outcomes)){
x = func2(x, outcomes[i])
}
return(x)
}
然后运行(使用func1
, func2
,func3
如上):
func1(0) %>% func2_iterate(c(T, F)) %>% func3
#result: 1
我还想指出,在这种特殊情况下,输出func2_iterate
只是它的输入,加上2
乘以 in 的数量T
,outcomes
减去5
乘以 in 的F
数量outcomes
。但我假设你实际上有一些功能可以做更复杂的事情。
推荐阅读
- java - 如何在控制器中传递多个参数?
- javascript - 如何在 Google 表格中将缩写数字更改为纯数字?
- git - Git 分支详细信息
- jquery - 如何通过输入 onchange 更改多日期属性
- python - 如何修复 ValueError:odoo 中不存在字段“活动”
- numerical-integration - Runge kutta (RK4) 表达式如何扩展?
- configuration - Azure 持久函数应用设置
- python - MFRC522 RFID Python3 脚本无法启动:没有这样的文件或目录
- html - 按钮和输入字段不是在一行中
- javascript - 如何验证表单中的角度反应下拉