Я хочу реализовать функцию в приложении Shiny
. Моя собственная функция get_calculate()
имеет данные аргументов и допуска в качестве входных данных и возвращает list
с data.frame
и plot
.блестящее приложение с собственной функцией
Я хочу показать выход в зависимости от допуска. В моей функции сервера я использую 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') –
Спасибо за ваш ответ. Блестящее приложение все еще не работает. Сообщение об ошибке в блестящем приложении: «объект типа« закрытие »не является подмножеством» – user5308682
возможно 'infile <- req (input $ datafile)' вместо 'if (is.null (infile))' – user5029763