R Shiny Handsontable:使用handsontable中的数据框

时间:2018-08-21 10:52:34

标签: r shiny rhandsontable

在下面的玩具示例中,我有一个数据集datapred。使用rhandsontable将数据集输出到交互式表。然后,我用hot_to_r将其隐藏在新的data.frame中。我的问题是,当我试图在函数prediction()中使用它时,它会向我发送错误消息,并且应用程序崩溃。我不明白为什么。

我是法国人,所以我将英语消息转换为: as.name中的错误:“ pairlist”对象无法自动转换为“ symbol”类型。

library(shiny)
library(frailtypack)
library(rhandsontable)
data("readmission", package = "frailtypack")

ui <- fluidPage(
  titlePanel("prediction"),

  mainPanel(
  fluidRow(rHandsontableOutput("hot")),
  br(),
  plotOutput("pred")
  )
)

server <- function(input, output) {

newdata <- subset(readmission,select = c("time","event","id","dukes"))

datapred <- newdata[1,]

data <- reactive({
  DF = hot_to_r(input$hot)
  DF
})

model <- frailtyPenal(Surv(time,event)~cluster(id)+dukes,n.knots=10,
                    kappa=10000,data=readmission)

predict <- reactive(
prediction(model, data(),t=200,window=seq(50,1900,50),
                                MC.sample=100))

output$hot <- renderRHandsontable({
    rhandsontable(datapred)
    })

data <- reactive({
      DF = hot_to_r(input$hot)
      DF
})

output$pred <- renderPlot({
plot(predict(),conf.bands=TRUE)
})

}
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

您可以像这样简单地首先评估data()。我还添加了一些检查,以便在初始化期间不会出现其他错误

library(shiny)
library(frailtypack)
library(rhandsontable)
data("readmission", package = "frailtypack")

ui <- fluidPage(
  titlePanel("prediction"),

  mainPanel(
    fluidRow(rHandsontableOutput("hot")),
    br(),
    plotOutput("pred")
  )
)

server <- function(input, output) {

  newdata <- subset(readmission,select = c("time","event","id","dukes"))
  datapred <- newdata[1,]

  data <- reactive({
    hot <- input$hot
    if (!is.null(hot)) hot_to_r(hot)
  })

  model <- frailtyPenal(Surv(time,event)~cluster(id)+dukes,n.knots=10,
                        kappa=10000,data=readmission)

  predict <- reactive({
    dat <- data()
    if (!is.null(dat)) {
      prediction(model, dat,t=200,window=seq(50,1900,50),
                 MC.sample=100)
    }
  })

  output$hot <- renderRHandsontable({
    rhandsontable(datapred)
  })

  output$pred <- renderPlot({
    pred <- predict()
    if (!is.null(pred)) plot(pred, conf.bands = TRUE)
  })
}
shinyApp(ui = ui, server = server)