【发布时间】:2017-04-04 15:16:52
【问题描述】:
我想在Shiny 应用程序中实现一个功能。我自己的函数get_calculate() 将参数数据和容差作为输入,并用data.frame 和plot 重新运行list。
我想根据公差显示输出。在我的服务器功能中,我使用reactive() 运行get_calculate(),但它不起作用。
如果我写 renderPlot() 和 renderDataTable() get_calculate() 有效。
然而,对于大型数据集,它的效率很低,因为 Shiny 将不得不运行 get_calculate() 两次。
library(shiny)
library(shinydashboard)
library(foreign)
#load my own function
source("01-get_calculate.R")
ui <- dashboardPage(
dashboardHeader(title = "Analysis"),
dashboardSidebar(
sidebarMenu(
menuItem("Load data", tabName = "data", icon = icon("database")),
menuItem("Mainboard", tabName = "Mainboard", icon = icon("dashboard"))
)
),
dashboardBody(
tabItems(
tabItem(tabName = "data",
fileInput("datafile", "Choose file",
accept = c("text/csv/rds/dbf", 'text/comma-separated-values,text/plain')),
dataTableOutput("mytable")
),
tabItem(tabName = "Mainboard",
fluidRow(
box(
title = "Input", status = "primary", solidHeader = TRUE, collapsible = TRUE,
sliderInput(inputId = "tol",
label = "Tolerance",
value = 4, min = 1, max = 15, step = 1)
)),
fluidRow(
box(
title = "Adherence Curve", status = "warning", solidHeader = TRUE, collapsible = TRUE,
plotOutput("plot_kpm")
),
box(
title = "Overview Table", status = "primary", solidHeader = TRUE, collapsible = TRUE,
tableOutput("table_kpm")
)
)
)
)
)
)
server <- function(input, output) {
filedata <- reactive({
infile <- input$datafile
if (is.null(infile)) {
return(NULL)
}
read.dbf(infile$datapath)
})
output$mytable <- renderDataTable({
filedata()
})
**test <- reactive({
get_calculate(filedata(), tolerance = input$tol)
})
output$plot_kpm <- renderPlot({
test$kpm_chart
})
output$table_kpm <- renderDataTable({
test$data_kpm[, c("Time", "numbers", "Percent")]
})**
}
shinyApp(ui = ui, server = server)
【问题讨论】:
-
试试
source("01-get_calculate.R", local = TRUE) -
感谢您的回答。闪亮的应用程序仍然无法正常工作。闪亮应用程序中的错误消息是:“'closure' 类型的对象不是子集”
-
可能是
infile <- req(input$datafile)而不是if(is.null(infile))
标签: r shiny shinydashboard reactive