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

计算AUDPC值时遇'time_intervals'参数缺失错误的技术求助

问题:调用AUDPC函数提示参数缺失,但参数实际存在

我尝试基于随时间变化的病害数据计算AUDPC值,调用自定义audpc函数时提示参数"time_intervals"缺失,但打印该参数时能看到其值。以下是我的R代码:

# 拆分日期行和表头行到两个独立数据框
date_row <- convertToDate(data[1, 4:ncol(data)])
header_row <- data[2, 1:13]
colnames(data) <- c("", "", "", paste0("Day.", 1:length(date_row)))

# 排除数据框的前两行
data_numeric <- data[-c(1:2), c(4:13)]
data_numeric <- apply(data_numeric, 2, as.numeric)

# 截取start_time和end_time以匹配data_numeric的长度
start_date <- as.Date(date_row[1], format="%d-%m-%Y")
time_intervals <- difftime(as.Date(date_row[-1], format="%d-%m-%Y"), start_date, units="days")
time_intervals <- as.numeric(time_intervals)
# 转换start_date为日期对象
start_date <- as.Date(start_date, format = "%d/%m/%Y")

# 转换end_date为字符向量
end_date <- as.character(end_date, format = "%Y-%m-%d")
end_date <- start_date + days(time_intervals)
print(time_intervals)

# 计算AUPDC和StAUDPC
audpc <- function(x, start_date, time_intervals) {
  auc <- 0
  for (i in 2:length(x)) {
    auc <- auc + (time_intervals[i] - time_intervals[i-1]) * ((x[i-1] + x[i])/2)
  }
  return(auc)
}


aupdc_vec <- c(NA, NA, apply(data_numeric, 1, function(x) audpc(x, time_intervals)))

# 将AUPDC和StAUDPC添加到数据框
data$AUPDC <- aupdc_vec

错误原因分析

  • 参数传递不匹配:自定义audpc函数定义了3个参数,但调用时只传了2个。R按位置匹配参数,此时time_intervals会被匹配到第二个参数start_date,第三个参数time_intervals因未传递而缺失。且函数内部完全没用到start_date,属于冗余参数。
  • 时间间隔逻辑错误:当前time_intervals计算的是各日期与起始日的天数差,而AUDPC需要的是相邻观测日的间隔天数。这种计算方式会导致循环时出现下标越界(x的长度比time_intervals多1,最后一次循环时time_intervals[i]不存在)。

解决步骤

1. 修正自定义函数

移除冗余的start_date参数,同时修正时间间隔的使用逻辑:

audpc <- function(x, time_intervals) {
  auc <- 0
  # 循环对应n-1个时间间隔
  for (i in 2:length(x)) {
    # time_intervals[i-1]是第i-1到第i个观测日的间隔天数
    auc <- auc + time_intervals[i-1] * ((x[i-1] + x[i])/2)
  }
  return(auc)
}

2. 修正时间间隔计算方式

计算相邻日期的间隔天数,确保长度与观测值的间隔数匹配:

# 将所有日期转换为Date对象
date_days <- as.Date(date_row, format = "%d-%m-%Y")
# 计算相邻日期的天数差
time_intervals <- diff(date_days)
time_intervals <- as.numeric(time_intervals)

3. 修正函数调用

现在函数仅需两个参数,调用时传递正确参数即可:

aupdc_vec <- c(NA, NA, apply(data_numeric, 1, function(x) audpc(x, time_intervals)))

4. 移除无用代码

原代码中end_date的转换逻辑混乱且未被使用,可直接删除:

# 删除以下代码
# end_date <- as.character(end_date, format = "%Y-%m-%d")
# end_date <- start_date + days(time_intervals)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:07:51