library(shiny)
library(DT)
Attaching package: 'DT'
The following objects are masked from 'package:shiny':
dataTableOutput, renderDataTable
library(ggplot2)library(shiny)
library(DT)
Attaching package: 'DT'
The following objects are masked from 'package:shiny':
dataTableOutput, renderDataTable
library(ggplot2)amort_francesa <- function(P, i, n) {
cuota <- P * (i * (1 + i)^n) / ((1 + i)^n - 1)
saldo <- P
tabla <- data.frame(Mes = 1:n, Cuota = NA, Interés = NA, Amortización = NA, Saldo = NA)
for (mes in 1:n) {
interes <- saldo * i
amort <- cuota - interes
saldo <- saldo - amort
tabla[mes, ] <- c(mes, round(cuota, 2), round(interes, 2), round(amort, 2), round(saldo, 2))
}
return(tabla)
}
amort_constante <- function(P, i, n) {
amort <- P / n
saldo <- P
tabla <- data.frame(Mes = 1:n, Cuota = NA, Interés = NA, Amortización = amort, Saldo = NA)
for (mes in 1:n) {
interes <- saldo * i
cuota <- amort + interes
saldo <- saldo - amort
tabla[mes, ] <- c(mes, round(cuota, 2), round(interes, 2), round(amort, 2), round(saldo, 2))
}
return(tabla)
}
amort_gradual <- function(P, i, n) {
cuota <- P * (i * (1 + i)^n) / ((1 + i)^n - 1)
saldo <- P
tabla <- data.frame(Mes = 1:n, Cuota = NA, Interés = NA, Amortización = NA, Saldo = NA)
for (mes in 1:n) {
interes <- saldo * i
amort <- cuota - interes
saldo <- saldo - amort
tabla[mes, ] <- c(mes, round(cuota, 2), round(interes, 2), round(amort, 2), round(saldo, 2))
}
return(tabla)
}ui <- fluidPage(
titlePanel("Calculadora de Amortizaciones"),
sidebarLayout(
sidebarPanel(
numericInput("P", "Monto del préstamo ($)", value = 10000),
numericInput("i", "Tasa de interés mensual (%)", value = 1),
numericInput("n", "Número de pagos", value = 12),
selectInput("tipo", "Tipo de amortización",
choices = c("Francesa", "Constante", "Gradual")),
actionButton("calcular", "Calcular")
),
mainPanel(
DTOutput("tabla"),
plotOutput("grafico")
)
)
)server <- function(input, output) {
datos <- eventReactive(input$calcular, {
P <- input$P
i <- input$i / 100
n <- input$n
switch(input$tipo,
"Francesa" = amort_francesa(P, i, n),
"Constante" = amort_constante(P, i, n),
"Gradual" = amort_gradual(P, i, n))
})
output$tabla <- renderDT({
datatable(datos(), options = list(pageLength = 12))
})
output$grafico <- renderPlot({
df <- datos()
ggplot(df, aes(x = Mes)) +
geom_line(aes(y = Cuota, color = "Cuota")) +
geom_line(aes(y = Interés, color = "Interés")) +
geom_line(aes(y = Amortización, color = "Amortización")) +
scale_color_manual(values = c("Cuota" = "blue", "Interés" = "red", "Amortización" = "green")) +
labs(title = "Componentes del Pago", y = "Monto ($)", color = "Leyenda") +
theme_minimal()
})
}shinyApp(ui, server)