使用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 ) )
错误原因分析
- dimnames参数冗余且格式不匹配:当第一个参数是带dimnames的数组时,
ratetable函数会自动读取数组的dimnames,无需显式传递dimnames参数。显式传递反而会触发函数内部的长度校验错误——函数期望dimnames参数是与dimid对应的单个维度名称向量,而非完整的数组dimnames列表。 - 年份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
相关产品推荐
相关产品推荐

