我不是闪亮的专家,当在结果进入矩阵/ 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
我理解但我已经搜索了很多并且没有找到解决这个问题的方法。
答案 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)