R shiny - 错误:必须是数字

时间:2018-04-19 15:37:55

标签: r shiny

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({
        model <-frailtyPenal(Surv(time,event)~cluster(id)+ sex + dukes, data=readmission, 
                hazard = "Piecewise-per", nb.int = input$nb)   
        print(model)
      })
    }
    shinyApp(ui, server)

嗨,上面的代码将我发回作为nb.int必须为数字的错误。输入$ nb是一个数字。 我不明白为什么。

1 个答案:

答案 0 :(得分:0)

错误消息非常自我解释。 input$nb属于integer类(int),但frailtyPenal需要numericdouble)。您可以使用as.numeric转换它。

大多数R函数在内部在类型之间进行转换,因此您可能不会经常看到这一点,但偶尔会对函数的输入参数有非常严格的要求。

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({
    message("start render")
    message(input$nb)
    message(class(input$nb))
    model <-frailtyPenal(Surv(time,event)~cluster(id)+ sex + dukes, data=readmission, 
                         hazard = "Piecewise-per", nb.int = as.numeric(input$nb))   
    print(model)
  })
}
shinyApp(ui, server)