【问题标题】:ShinyApp Function not returning ResultShinyApp 函数不返回结果
【发布时间】:2020-07-04 12:59:43
【问题描述】:

我需要有关以下闪亮应用服务器功能的帮助。我的问题是values$npv 总是显示为空,即使是0。我认为fun 功能没有做正确的事情,我没有想法。 如果我用paste("Net Present Value:", isolate(input$val_inv))renderText 进行硬编码,我总是有结果,但不是我想要的结果,这让我猜想fun 函数不能正常工作。

     inline_numericInput=function(ni){
  tags$div( class="form-inline",ni)
}

ui <- shinyUI(fluidPage(
  tags$head(tags$style("#side_panel{
                       padding-left:10px;
                       }
                       .form-group {
                       margin-bottom: 15px !important;
                       }
                       .form-inline .form-control {
                       width:80%;
                       }
                label{ width:30px;}

                       ")),

  titlePanel("Example"),

  sidebarLayout(

    sidebarPanel(width = 4,id="side_panel",
                 fluidRow(
                   column(6, inline_numericInput(numericInput("val_inv", label = "Inv:", value = 0))),
                 ),
                 fluidRow(
                   column(6, inline_numericInput(numericInput("val_r", label = "R:", value = 0))),
                 ),
                 fluidRow(
                   column(6, inline_numericInput(numericInput("val_n", label = "N:", min = 50,value = 50))),
                   column(6, inline_numericInput(actionButton("btn_calcnpv", label = "Compute NPV")))
                 )

    ),

    mainPanel(
      p('Results:'),
    textOutput("val_npv")
    )
  )
))

server <- function(input, output) {

    values <- reactiveValues()
    values$npv <- 0

    observe({
        input$btn_calcnpv
        fun <- function(n){
            cf <- 0
            for (i in 1:n){
               cf <- cf + isolate(input$val_inv)/(1+input$var_r)**i
            }
            cf
        }
        values$npv <- fun(isolate(input$val_n))- isolate(input$val_inv)
        #values$npv <- values$npv - isolate(input$val_inv)
    })

    output$val_npv <- renderText({
        if(input$btn_calcnpv)
            paste("Net Present Value:", values$npv)
        else ""
    })

}

shinyApp(ui, server) 

【问题讨论】:

  • 请提供一个工作示例。
  • 除了之前的评论,看here了解如何制作可重现的例子
  • 我已经给出了整个代码。
  • 请检查输入变量的名称:val_r 与 var_r。此外,我认为输入变量是字符。也许,你必须强迫他们使用数字。

标签: r shiny shinyapps


【解决方案1】:

这是一个使用 eventReactive 而不是那么多隔离的答案。 此外,在计算发生之前,输入被强制转换为数字。 使用 eventReactive,通过按下计算按钮开始计算。

server <- function(input, output) {


  npv <- eventReactive(input$btn_calcnpv, {

    val_inv <- as.numeric(input$val_inv)
    val_r <- as.numeric(input$val_r)
    val_n <- as.numeric(input$val_n)
    fun <- function(n){
      cf <- 0
      for (i in 1:n){
        cf <- cf + val_inv/(1+val_r)**i
      }
      cf
    }
    temp <- fun(val_n)- val_inv
    temp
  })

  output$val_npv <- renderText({
      req(npv())
      paste("Net Present Value:", npv())

  })

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多