在R中将死亡率转换为概率时遇一元运算符无效参数错误
问题解决:死亡率转概率时出现"invalid argument to unary operator"错误
问题根源
从你提供的数据集结构能看到,Total列的数值是以逗号作为小数点的字符串格式(比如"0,002069453"),而read.csv默认会把这类内容识别为字符型。后续转成矩阵后,v_r_HDage依然是字符向量,无法执行-v_r_HDage这类数值运算,因此触发错误。
解决步骤
1. 读取CSV时正确解析数值
修改read.csv的参数,指定小数点分隔符为逗号,同时关闭自动转因子的默认行为:
Mortality_2021 <- read.csv("C:\\Mortality_table_CSV.csv", sep = ";", dec = ",", stringsAsFactors = FALSE)
2. 提取数值型死亡率向量
无需转成矩阵,直接提取Total列即可得到数值向量:
v_r_mort_by_age <- Mortality_2021$Total names(v_r_mort_by_age) <- Mortality_2021$Age
3. 后续代码正常执行
提取目标年龄区间的死亡率,再转换为概率:
v_r_HDage <- v_r_mort_by_age[(n_age_init + 1) + 0:(n_cycles - 1)] v_p_HDage <- rate_to_prob(v_r_HDage) # 或直接用公式:v_p_HDage <- 1 - exp(-v_r_HDage)
验证方法
可以先检查向量类型,确认已转为数值型:
class(v_r_HDage) # 正常应返回"numeric"
内容的提问来源于stack exchange,提问作者aaPe
相关产品推荐
相关产品推荐

