Добро пожаловать в stackoverflow!
Вам понадобится req()
, чтобы убедиться, что в вашу функцию не передаются пустые пользовательские данные. Кроме того, я отклонил ваши входные данные, чтобы немного задержать расчет (поэтому у пользователя есть некоторое время, чтобы завершить sh его ввод до начала расчета)
Однако кажется, что ваш расчет работает только для определенной крысы ios credit.amount и mthl.rate. Возможно, вам придется добавить дополнительные проверки здесь.
Пожалуйста, проверьте следующее:
library(shiny)
library(dplyr)
ui <- fluidPage(
titlePanel("Farm Statistic"), # TITLE CONTENT
sidebarLayout(
sidebarPanel(("Enter your Farm Information here"),
numericInput("credit_amount",
"How much is your credit?",
NA),
sliderInput("yr_inter",
"Interrest rate p.a.",
min = 0.5,
max = 20,
value = 8.5,
step = 0.5
),
numericInput("mthl_rate",
"Your monthly payment",
NA)
), # SIDE BAR CONTENT
mainPanel(("Credit decay"),
textOutput("decaytime"),
tableOutput("creditmod")
# , textOutput("")
) # MAIN PANEL CONTENT
)
)
server <- function(input, output, session) {
mthl.inter.tmp <- reactive({req(input$yr_inter/1200)}) # NUMERIC INPUT
credit.amount.tmp <- reactive({req(input$credit_amount)}) # SLIDER INPUT
mthl.rate.tmp <- reactive({req(input$mthl_rate)}) # NUMERIC INPUT
mthl.inter <- debounce(mthl.inter.tmp, 500)
credit.amount <- debounce(credit.amount.tmp, 500)
mthl.rate <- debounce(mthl.rate.tmp, 500)
# calculate repayment time
credit.decay = reactive({
req(mthl.inter(), credit.amount(), mthl.rate())
as.numeric((log(1 - (mthl.inter() * credit.amount() / mthl.rate())) / log(1 + mthl.inter())) * -1)
})
# calculate credit model
credit.model <- reactive({
req(credit.decay())
credit.df <- data.frame(rep(NA, credit.decay() %>% ceiling()))
credit.df[1,1] <- credit.amount()
for (n in 2:(credit.decay() %>% ceiling()) ){
credit.df[n,1] = credit.df[n-1,1] * (1 + mthl.inter()) - mthl.rate()
}
return(credit.df)
})
output$decaytime = renderText(credit.decay() %>% ceiling())
output$creditmod = renderTable(credit.model())
}
shinyApp(ui, server)