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

R语言使用match函数编写自定义计算函数时报错找不到c_total_biomass

问题原因

  1. 直接报错触发点:你在代码中写了c_total_biomass(match("R", stage)),R语言中圆括号默认代表调用函数,而c_total_biomass是数值向量不是函数,因此抛出“找不到函数”的报错,提取向量元素需要使用方括号[]。
  2. 隐藏逻辑错误:你使用了rowwise()逐行运算,此时传入自定义函数的stage是当前行的单个字符串,不是完整的stage列向量,因此match("R", stage)永远无法匹配到结果,即使修复括号问题也无法得到正确的首次R对应的生物量。

修正方案

先把全局的首次出现R对应的生物量基准值单独计算,再传入自定义函数即可,修正后的完整代码如下:

library(dplyr)
p_hi <- 0.472              
rate_increase_hi <- 1.058*10^(-3)  

# 全局计算首次出现R对应的c_total_biomass基准值
c_total_biomass <- seq(0, 1600, 100)
stage <- c(rep("V", 10), rep("R", 7))
first_R_biomass <- c_total_biomass[match("R", stage)]

# 简化自定义函数,移除不必要的参数和逻辑
seed.mass.fraction.f <- function(stage, p_hi, rate_increase_hi, c_total_biomass, first_R_biomass){
  seed.mass.fraction <- 0  
  rate_increase_hi <- dplyr::if_else(stage == "V", 0, rate_increase_hi)
  c_biomass_during_rep <- dplyr::if_else(stage == "V", 0, c_total_biomass - first_R_biomass)
  
  seed.mass.fraction <- rate_increase_hi * c_biomass_during_rep
  # 超过p_hi时自动封顶
  seed.mass.fraction <- pmin(seed.mass.fraction, p_hi)
  
  return(seed.mass.fraction)
}

# 生成结果表
data.smf <- data.frame(stage, c_total_biomass) %>%
  rowwise() %>%
  mutate(smf = seed.mass.fraction.f(stage, p_hi, rate_increase_hi, c_total_biomass, first_R_biomass)) %>%
  ungroup()

运行结果验证

前10行V阶段的smf全部为0,R阶段从第一个R行开始,smf依次为0、0.1058、0.2116、0.3174、0.4232、0.472、0.472,和需求的计算逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:30:04