蘑菇仙人 2024-04-23 12:13 采纳率: 96%
浏览 4
已结题

Error in if (nrow(gg_dta) > attributes(gg_dta)$modelsize) { : 参数长度为零

做变量重要性排序图,改变变量名后,画图出错:Error in if (nrow(gg_dta) > attributes(gg_dta)$modelsize) { :
参数长度为零


gg_dta <- gg_minimal_vimp(rfsrc_pbcmy)
gg_dta$names
gg_dta <- gg_dta %>%mutate(names = ifelse(names == "AKI分期13", "AKI 3期", names))
plot(gg_dta)
Error in if (nrow(gg_dta) > attributes(gg_dta)$modelsize) { : 
  参数长度为零
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-23 12:13
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试使用ggminimal包中的gg_minimal_vimp()函数来绘制随机森林模型(rfsrc_pbcmy)的变量重要性排序图,并且在修改了变量名称后遇到了错误。这个错误提示是由于在执行某些条件判断时,涉及到的数据行数(nrow(gg_dta))或数据的某个属性(attributes(gg_dta)$modelsize)没有被正确地初始化。

    首先,让我们确保你的数据已经被正确处理。下面是修复这个问题的一种可能方法:

    # 假设你的原始随机森林模型名为rfsrc_pbcmy
    library(ggminimal)
    
    # 计算变量重要性
    gg_dta <- gg_minimal_vimp(rfsrc_pbcmy)
    
    # 查看当前的变量名称
    gg_dta$names
    
    # 修改变量名为"AKI分期13"的名称为"AKI 3期"
    gg_dta$names[gg_dta$names == "AKI分期13"] <- "AKI 3期"
    
    # 确保gg_dta是一个数据框并且不是NULL
    if (is.null(gg_dta) || !is.data.frame(gg_dta)) {
        stop("gg_dta不是一个有效的数据框")
    }
    
    # 检查gg_dta是否有'nrow'和'modelsize'属性
    if (!all(c("nrow", "modelsize") %in% names(attributes(gg_dta)))) {
        warning("gg_dta缺少'nrow'或'modelsize'属性,这可能是导致错误的原因。")
    }
    
    # 绘制图形
    plot(gg_dta)
    

    这段代码首先计算了随机森林模型的变量重要性,然后对相应的变量名进行了替换。接下来,我们检查了gg_dta是否为一个有效的数据框,并且确认它具有'nrow'和'modelsize'这两个属性。如果没有这些属性,那么就给出警告信息。

    如果以上步骤都无法解决你的问题,那可能是因为gg_minimal_vimp()函数返回的结果格式发生了变化,或者有其他隐藏的问题。在这种情况下,建议查看ggminimal包的最新文档,或者尝试使用其他的包,比如varImpPlot来自randomForest包来绘制变量重要性图。如果你的问题仍然存在,可能需要提供更多的上下文信息以便进一步分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月23日