You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过自定义函数自动生成并展示计算步骤

自动生成计算步骤列的R实现

现有场景

你已经实现了自定义计算公式的函数my_formula,并能将其应用到数据框生成计算结果,但目前手动编写case_when生成计算步骤列的方式不够灵活,需要自动化实现。

现有代码

自定义公式函数:

my_formula <- function(x, y, z = 195.084){
  output = case_when(
    y == "A" ~ x/z * 300.05,
    y == "B" ~ x/z * 397.28,
    .default = x
  )
  return(output)
}

目标数据框:

df <- structure(list(id = 1:2, ppm = c(0.73, 0.807), material = c("A", "B")), 
                class = "data.frame", row.names = c("1", "2"))

手动生成计算步骤的代码:

library(dplyr)
df %>% 
  mutate(ppm_calculated = my_formula(ppm, material)) %>% 
  mutate(calculation = case_when(
    material == "A" ~ sprintf("%.3f / 300.05 * 195.084", ppm),
    material == "B" ~ sprintf("%.3f / 397.28 * 195.084", ppm),
    .default = as.character(ppm)
  ))

自动化解决方案

核心是将material与对应计算系数的映射关系抽离成配置表,实现逻辑与配置分离:

步骤1:定义系数配置表

把不同material对应的计算系数和默认参数z统一管理:

library(dplyr)

# 配置material对应的计算系数
coef_table <- tibble(
  material = c("A", "B"),
  coef = c(300.05, 397.28),
  z = 195.084  # 对应原函数的默认参数
)

步骤2:关联配置表完成计算与步骤生成

通过left_join关联数据框与配置表,自动计算结果并生成步骤文本:

df %>%
  left_join(coef_table, by = "material") %>%
  mutate(
    # 自动计算结果(替代原my_formula函数逻辑)
    ppm_calculated = case_when(
      !is.na(coef) ~ ppm / z * coef,
      .default = ppm
    ),
    # 自动生成计算步骤文本
    calculation = case_when(
      !is.na(coef) ~ sprintf("%.3f / %.4f * %.4f", ppm, coef, z),
      .default = as.character(ppm)
    )
  ) %>%
  # 移除中间辅助列
  select(-coef, -z)

执行结果

id   ppm material ppm_calculated calculation             
  <int> <dbl> <chr>             <dbl> <chr>                   
1     1 0.730 A                  1.12 0.730 / 300.0500 * 195.0840
2     2 0.807 B                  1.64 0.807 / 397.2800 * 195.0840

方案优势

  • 可扩展:新增material类别时,仅需在coef_table中添加一行,无需修改业务代码
  • 防出错:计算逻辑与步骤文本共享同一套配置参数,避免手动编写时的参数不一致问题
  • 更简洁:消除重复的case_when分支,代码结构更清晰

内容的提问来源于stack exchange,提问作者TarJae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:12:39