首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ShinyApp函数未返回结果

ShinyApp函数未返回结果
EN

Stack Overflow用户
提问于 2020-03-24 10:24:51
回答 1查看 50关注 0票数 1

我需要以下闪亮的应用程序服务器功能的帮助。我的问题是,即使有0values$npv也总是输出为空。我认为fun函数没有做正确的事情,我没有想法。如果我用paste("Net Present Value:", isolate(input$val_inv))renderText进行硬编码,我总是会得到一个结果,但不是我想要的结果,这让我猜测fun函数并没有像它应该的那样工作。

代码语言:javascript
复制
     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) 
EN

回答 1

Stack Overflow用户

发布于 2020-03-26 16:28:35

这是一个使用eventReactive的答案,而不是太多的隔离。此外,在计算发生之前,输入被强制为数字。使用eventReactive时,只需按compute-按钮即可开始计算。

代码语言:javascript
复制
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())

  })

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60824152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档