# Para hacer el documento interactivolibrary(shiny)# Para darle formato de tabla al data.frame y se muestre interactivolibrary(DT)
Attaching package: 'DT'
The following objects are masked from 'package:shiny':
dataTableOutput, renderDataTable
tabla.amort.UVR.pesos <-function(TipoAmortizacion=c("uvr", "pesos"), r, n, VP, UVR, e) {#' -TipoAmortizacion: toma el valor "uvr" o "pesos"#' -r: Inflación anual.#' -n: Número total de años.#' -VP: Valor presente o monto del préstamo.#' -UVR: Valor inicial de la UVR.#' -e: Tasa de entrada - rentabilidad bruta sobre inflacion.#' Devuelve una tabla de amortización en formato data.frame, en una nueva pestaña# calculamos los valores inciales necesarios para el correcto procedimiento en la amortizacion en cada tabla n.meses <- n *12# tiempo en meses i <- (1+ e) * (1+ r) -1# tasa de interés efectiva anual d <- i / (1+ i) # tasa de descuento EA i12 <-12* ((1+ i)^(1/12) -1) # tasa de interés nominal mensual i12_12 <- i12 /12# tasa de interés efectivs mensual d12 <-12* (1- (1- d)^(1/12)) # tasa de descuento nominal mensual k.mes <- (1+ r)^(1/12) -1# inflacion mensual a12 <- (1- (1+ i)^(-n)) / i12 # R <- VP / (12* a12)# cuota en pesos R_uvr <- R / UVR # cuota llevada a UVR# Creamos la tabla de amortizacion en uvr, con sus respectivas columnas tabla.uvr <-data.frame(matrix(0, nrow = n.meses +1, ncol =6))colnames(tabla.uvr) <-c("mes", "UVR", "Abono a capital UVR", "Intereses UVR", "Cuota en UVR", "Saldo fin de mes UVR")# La primera fila de la tabla de amortizacion sólo contiene unos valores,manualmente asignamos: mes 0, valor inicial de la UVR tomado directamente del parámetro de entrada y el saldo fin de mes (en UVR) que se calcula VP / UVR tabla.uvr[1, "mes"] <-0 tabla.uvr[1, "UVR"] <- UVR tabla.uvr[1, "Saldo fin de mes UVR"] <- VP / UVR# Se crea un for para el proceso de amortización, donde a cada j en el rango# de 1 hasta el total de número de meses, asigna de la siguiente manera:### mes j### UVR se calcula como UVR*(1+k.mes)### Intereses UVR= Saldo fin de mes UVR del mes anterior * i12_12 ### Abono a capital en UVR= Cuota (fija en UVR) del presente mes - Intereses UVR del presente mes### Saldo fin de mes UVR= Saldo fin de mes UVR del mes anterior - Abono a capital en UVR del presente mesfor (j in1:n.meses) { tabla.uvr[j +1, "mes"] <- j tabla.uvr[j +1, "UVR"] <- tabla.uvr[j, "UVR"] * (1+ k.mes) tabla.uvr[j +1, "Cuota en UVR"] <- R_uvr tabla.uvr[j +1, "Intereses UVR"] <- tabla.uvr[j, "Saldo fin de mes UVR"] * i12_12 tabla.uvr[j +1, "Abono a capital UVR"] <- tabla.uvr[j+1, "Cuota en UVR"] - tabla.uvr[j +1, "Intereses UVR"] tabla.uvr[j +1, "Saldo fin de mes UVR"] <- tabla.uvr[j, "Saldo fin de mes UVR"] - tabla.uvr[j +1, "Abono a capital UVR"] }# El primer if que nos define el tipo de amortización en uvrif(TipoAmortizacion=="uvr"){# Como ya definimos la tabla uvr y sus columnas de amrotizacion en el cuerpo# principal de la función, en adición, redondeamos los valores a dos cifras decimales. Amort.uvr <-round(tabla.uvr, 2)return(as.data.frame(Amort.uvr)) }# El segundo if que nos define el tipo de amortización en pesosif(TipoAmortizacion=="pesos"){# creamos la tabla para pesos con sus columnas correspondientes tabla.pesos <-data.frame(matrix(0, nrow = n.meses +1, ncol =5))colnames(tabla.pesos) <-c("mes","Abono a capital pesos", "Intereses pesos", "Cuota en pesos", "Saldo fin de mes pesos")# La primera fila de la tabla de amortizacion para pesos sólo contiene dos valores,# manualmente asignamos: mes 0 y el saldo fin de mes (en pesos) que es igual a VP tabla.pesos[1, "mes"] <-0 tabla.pesos[1, "Saldo fin de mes pesos"] <- VP # Se crea un for para el proceso de amortización, donde a cada j en el rango# de 1 hasta el total de número de meses, asigna de la siguiente manera:### mes j### Abono a capital en pesos se calcula como UVR * Abono a capital en UVR del presente mes### Intereses pesos= UVR * Intereses_UVR del presente mes### Cuota en pesos= UVR del presente mes * Cuota_en_UVR del presente mes### Saldo fin de mes pesos= UVR del mes presente * Saldo_fin_de_mes_UVR del presente mesfor (j in1:n.meses) { tabla.pesos[j +1, "mes"] <- j tabla.pesos[j +1, "Abono a capital pesos"] <- tabla.uvr[j+1, "UVR"] * tabla.uvr[j +1, "Abono a capital UVR"] tabla.pesos[j +1, "Intereses pesos"] <- tabla.uvr[j+1, "UVR"]*tabla.uvr[j +1, "Intereses UVR"] tabla.pesos[j +1, "Cuota en pesos"] <- tabla.uvr[j+1, "UVR"]*tabla.uvr[j+1, "Cuota en UVR"] tabla.pesos[j +1, "Saldo fin de mes pesos"] <- tabla.uvr[j+1, "UVR"]*tabla.uvr[j +1, "Saldo fin de mes UVR"] } Amort.pesos <-round(tabla.pesos, 2)return(as.data.frame(Amort.pesos)) }}ui <-fluidPage(titlePanel("Tabla de Amortización: Cuota vencida UVR"),sidebarLayout(sidebarPanel(numericInput("capital", "Capital:", value =100000000),numericInput("tasa", "Tasa de Interés Real Anual:", value =0.0928),numericInput("inflacion", "Tasa de Inflación Anual:", value =0.0700),sliderInput("plazo", "Plazo (años):", min =0, max =90, value =15, step =1),selectInput("tipo_amortizacion", "Tipo de Amortización:",choices =c("uvr", "pesos")),numericInput("uvr", "Valor de la UVR:", value =279.4269) ),mainPanel(DTOutput("tabla_amortizacion") ) ))server <-function(input, output) { output$tabla_amortizacion <-renderDT({ tabla <-tabla.amort.UVR.pesos(TipoAmortizacion = input$tipo_amortizacion,r = input$tasa,n = input$plazo,VP = input$capital,UVR = input$uvr,e = input$inflacion )datatable(tabla, options =list(pageLength =10, scrollX =TRUE,lengthMenu =c(13, 25, 37, 49, 61, 73, 85, 97, 109, 121, 133, 145, 157, 169, 181, 193, 205, 217, 229,241)),callback =JS("table.columns().header().to$().css({fontSize: '16px', fontWeight: 'bolder'});")) })}shinyApp(ui = ui, server = server)