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

R Shiny报错:must be a numeric 问题排查求助

解决Shiny结合frailtypack时的「must be a numeric」错误

我帮你排查出了问题的根源,其实是Shiny输入控件的类型和frailtyPenal函数的参数要求不匹配导致的:

问题原因

Shiny的sliderInput控件默认返回的是**数值型(numeric)数据——哪怕你设置了步长为1,返回的也是类似10.0这种带小数的数值,但frailtypack包的frailtyPenal函数中,nb.int参数要求传入的是整数型(integer)**数据,这种类型不匹配就触发了「must be a numeric」的错误提示(这个提示有点误导,实际是需要整数类型)。

解决方案

只需要把input$nb转换成整数类型再传给nb.int参数即可,用as.integer()函数就能轻松实现。

修改后的完整代码

library(shiny)
library(frailtypack)
data("readmission", package = "frailtypack")
ui <- fluidPage(
  sidebarPanel(
    sliderInput("nb", h5("Number of time intervals :"), min = 1, max = 20, value = 10)
  ),
  mainPanel(
    verbatimTextOutput("mod")
  )
)
server <- function(input, output) {
  output$mod <- renderPrint({
    # 关键修改:将input$nb转换为整数类型
    model <- frailtyPenal(Surv(time,event)~cluster(id)+ sex + dukes, 
                          data=readmission, hazard = "Piecewise-per", 
                          nb.int = as.integer(input$nb))
    print(model)
  })
}
shinyApp(ui, server)

验证小技巧

如果你想确认输入类型,可以在renderPrint里临时加入str(input$nb),运行后会看到控制台输出 num 10(说明是数值型),转换后再检查就是 int 10(整数型),完全符合函数的参数要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:06:14