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

使用R语言relsurv包创建ratetable时遇参数长度错误求助

解决relsurv包创建ratetable时的"Arguments do not all have the same length"错误

问题重现

尝试用relsurv包自定义死亡率数组创建ratetable时,出现如下错误:

Error in ratetable(tasso_mortalita_array, dimnames = dimnames(tasso_mortalita_array), : Arguments do not all have the same length (arg 2)

使用的代码如下:

# 定义年龄、年份和性别变量
age <- 0:10 # Ages from 0 to 10
year <- 2017:2019 # Years from 2017 to 2019
sex <- c("male", "female") # Sex (male and female)

# 创建含随机值的死亡率数组
tasso_mortalita_array <- array(runif(66, min = 0.0001, max = 0.0015),
dim = c(length(age), length(year), length(sex)),
dimnames = list(age = as.character(age),
year = as.character(year),
sex = sex))

# 创建ratetable(出错的代码)
pop_ratetable <- ratetable(
tasso_mortalita_array,
dimnames = dimnames(tasso_mortalita_array), # 显式传递dimnames
dimid = c("age", "year", "sex"),
factor = c(0, 0, 1),
type = c(2, 3, 1),
cutpoints = list(
0:10,
as.Date(paste(2017:2019, "-01-01", sep = "")), # 使用Date类型的年份
NULL
)
)

错误原因分析

  1. dimnames参数冗余且格式不匹配:当第一个参数是带dimnames的数组时,ratetable函数会自动读取数组的dimnames,无需显式传递dimnames参数。显式传递反而会触发函数内部的长度校验错误——函数期望dimnames参数是与dimid对应的单个维度名称向量,而非完整的数组dimnames列表。
  2. 年份cutpoints类型错误:type=3对应连续日历时间,cutpoints应使用数值型年份(如2017:2019),而非Date对象,否则会导致维度匹配异常。

解决方法

修正后的代码如下:

library(relsurv)

# 定义变量
age <- 0:10
year <- 2017:2019
sex <- c("male", "female")

# 创建死亡率数组
tasso_mortalita_array <- array(runif(66, min = 0.0001, max = 0.0015),
                               dim = c(length(age), length(year), length(sex)),
                               dimnames = list(age = as.character(age),
                                               year = as.character(year),
                                               sex = sex))

# 修正后的ratetable创建代码
pop_ratetable <- ratetable(
  tasso_mortalita_array,
  dimid = c("age", "year", "sex"),
  factor = c(0, 0, 1),  # 0=连续变量,1=分类变量
  type = c(2, 3, 1),    # 2=年龄维度,3=日历时间,1=分类变量
  cutpoints = list(
    0:10,               # 年龄断点
    2017:2019,          # 数值型年份断点
    NULL                # 分类变量无断点
  )
)

# 验证结果
print(pop_ratetable)

关键修正点

  • 移除了冗余的dimnames参数,让函数自动读取数组自带的dimnames
  • 将年份cutpoints从Date对象改为数值型年份,匹配type=3的连续日历时间要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:28:21