2017-09-09 3 views
0

내 할부 상환 테이블의 길이를 조정하고 싶습니다. 문제는 응용 프로그램과 해당 수식 (예 : 계산 기간 20 회)을 처음 실행할 때, 다음 실행에서 10 개의 기간을 실행해야하는 경우 수식이 이전에 계산 된 값을 유지하면서 계산을 덮어 쓰는 경우입니다.반짝이는 앱에서 동적 테이블 길이 조정 - R

샤인 코드는이 :

#ui.r 

library(shiny) 

    shinyUI(
    fluidPage(
     titlePanel("Fondo de Amortización"), 

     sidebarLayout(
     sidebarPanel(numericInput(inputId = 'M',label = 'Monto',value = 2400000), 
        numericInput(inputId = 'n',label = 'Período',value = 20), 
        numericInput(inputId = 'i',label = 'Interés',value = 3.7)), 

     mainPanel(
      tableOutput('x'))) 

    )) 

#server.r 

library(shiny) 


shinyServer(function(input, output, session) { 

    options(digits = 7) 
    options(scipen = 999) 

    IR <<- numeric();CA <<- numeric();SF <<- numeric() 

    f.amort <- function(M,i,n) { 

    R <<- M*i/(((1 + i)**n)-1) 
    IR[1] <<- 0 
    IR[2] <<- R*i 
    CA[1] <<- R 
    SF[1] <<- R 

    for (k in 1:(n-1)) { 

     CA[k+1] <<- R + IR[k+1] 
     SF[k+1] <<- SF[k] + CA[k+1] 

     if (k < n-1){ 
     IR[k+2] <<- SF[k+1]*i 
     } 
    } 
    } 

    output$x <- renderTable({ 
    f.amort(input$M, input$i/100, input$n) 
    tabla <- rbind((cbind("Rent" = c(R, recursive=TRUE), 
          (cbind("I" = IR, "Acumulado" = CA, 
              "BaC" = SF)))), 
        c(R*input$n,sum(IR), 
         sum(CA),000)) 
    }) 
}) 

나는 테이블의 생성을위한 계산을 이해하지만, 샤이니에 동적으로 재생하는 순간에, 나는 그것의 길이의 수를 조정할 수 없습니다 미문. https://github.com/pakinja/-Financial-Mathematics-in-R/blob/master/AmortizationFund.r#L40

답변

0

은 첫째, 당신의 반짝 응용 프로그램에서 전역 변수를 사용하여 전역 변수가 세션 공유하고 있기 때문에 나쁜 생각 : 나는 응용 프로그램의 아이디어를 얻을 때 여기

는 링크입니다. 대신 reactiveValues을 사용해야합니다.

그럼에도 불구하고 코드의 문제점은 길이를 조정하여 함수의 모든 변수를 재설정해야한다는 것입니다.

f.amort <- function(M,i,n) { 

    R <<- M*i/(((1 + i)**n)-1) 
    #Reset you variables 
    IR <<- numeric();CA <<- numeric();SF <<- numeric() 

    IR[1] <<- 0 
    IR[2] <<- R*i 
    CA[1] <<- R 
    SF[1] <<- R 

    for (k in 1:(n-1)) { 

     CA[k+1] <<- R + IR[k+1] 
     SF[k+1] <<- SF[k] + CA[k+1] 

     if (k < n-1){ 
     IR[k+2] <<- SF[k+1]*i 
     } 
    } 
    } 

또한 서버 외부에서 기능을 정의하는 것은 많은 기능을 가진 서버를 혼란스럽게하는 대신 좋은 아이디어 일 것입니다.

관련 문제