如何更改依赖于numericInput的data.frame值

时间:2017-07-14 01:56:52

标签: r datatable shiny

我不是闪亮的专家,当在结果进入矩阵/ data.frame的函数中使用numericInput时,我很难在data.frame中更改数据。 这是我问题的一个玩具示例:

ui.R
library(DT)
library(shiny)
shinyUI(fluidPage(
  fluidRow(
           column(2,numericInput(inputId = "precentil",label = "percentile", 
                                 value = 0.9, min = 0.01, max=1, step = 0.01)),
           column(6,dataTableOutput("matResult")))
))


server.R
library(DT)
library(shiny)
shinyServer(function(input, output) {

  data =  rnorm(1000)
  percentile = reactive({input$percentil})
  quant = reactive({quantile(data,percentile())})
  result = as.data.frame(c("quantile", quant))
  output$matResult =  DT::renderDataTable(DT::datatable(result,
                            options = list(paging = FALSE),rownames=F))

})

我得到的错误是:Warning: Error in as.data.frame.default: cannot coerce class "c("reactiveExpr", "reactive")" to a data.frame我理解但我已经搜索了很多并且没有找到解决这个问题的方法。

1 个答案:

答案 0 :(得分:0)

如果您希望更新data.frame,那么您需要使其成为被动的并使其具有反应性。输入值已经被反应。好像你没有动摇反应式编程。我建议你查看Shiny Developer会议的Effective Reactive Programming videos。此外,这应该工作。

data <- rnorm(1000)
ui <- fluidPage(
  fluidRow(
  column(2,numericInput(inputId = "percentile",label = "percentile", 
                             value = 0.9, min = 0.01, max=1, step = 0.01)),
  column(6,dataTableOutput("matResult")))
)
server <- function(input, output) {
  result <- reactive({
    data.frame("quantile" = quantile(data, as.numeric(input$percentile) ))
  })
  output$matResult =  DT::renderDataTable(DT::datatable(result(),
                            options = list(paging = FALSE), rownames=F))
}
shinyApp(ui=ui, server=server)