使用QRISK3包计算CVD风险时返回<0 rows>问题求助
解决QRISK3输出"<0 rows> (or 0-length row.names)"的问题
核心排查方向及解决步骤
变量取值超出模型预设范围
QRISK3的算法对输入变量有严格的医学取值区间限制,哪怕数据没有缺失,只要单条记录的变量值超出范围,就会被自动过滤,最终返回空结果。
操作:对照QRISK3的变量要求(比如年龄通常限定在40-74岁、BMI在18-40之间),用summary()查看变量分布:summary(your_dataset$age) summary(your_dataset$bmi)找出超出范围的记录并修正,或者确认是否需要调整函数的参数允许范围(部分函数支持自定义区间)。
变量类型/命名不匹配
QRISK3函数对变量类型有硬性要求:分类变量必须是因子类型而非字符型,数值变量不能是字符格式。哪怕变量名完全一致,类型错误也会导致数据不被识别。
操作:用str(your_dataset)对比示例数据集的变量类型,将不匹配的类型转换,比如:# 将字符型分类变量转为因子 your_dataset$smoking_status <- as.factor(your_dataset$smoking_status)全量数据被函数默认筛选规则排除
部分QRISK3函数会自动排除已有心血管病史、或不符合研究人群标准的记录,如果你的数据集所有记录都命中排除规则,就会返回空结果。
操作:手动模拟函数的筛选逻辑,查看剩余数据量:# 以排除已有CVD病史、年龄在40-74岁为例 filtered_data <- your_dataset %>% filter(age >= 40, age <=74, is.na(cvd_history)) nrow(filtered_data) # 若结果为0,说明全量数据被排除此时需要检查数据集的入组标准,或者调整函数的筛选参数(比如关闭
exclude_cvd选项,具体看函数文档)。函数参数传递错误
调用函数时若参数名写错、或传入了不符合要求的参数值(比如country参数指定了数据集不适用的地区),也会导致无结果返回。
操作:核对函数调用代码与示例代码的参数差异,确保所有变量参数和全局参数(如地区、模型版本)都正确传递:# 示例正确调用(根据实际函数调整) qrisk_output <- qrisk3( data = your_dataset, age = age_col, sex = sex_col, bmi = bmi_col, country = "England" )
内容的提问来源于stack exchange,提问作者Shiva
相关产品推荐
相关产品推荐

