我计划将大型 Excel 模型转换为 R Shiny。在开始编码之前,我想澄清几个方面。其中之一涉及从 Excel 转换依赖关系逻辑,我将使用下面的一个最小示例进行解释。
假设我们有一个输入,
Input 1
,和一个简单的1 × 5 data frame
。 Year 1
的值基于真实数据。
鉴于此方法将适用于 200 多个变量,我想知道创建反应值的最佳实践:
Year 2
)或反应数据(例如,从Year 3
开始)。Input 1
的影响。我希望我没有想太多——任何反馈或建议将不胜感激。
直接翻译是将每个公式单元格转换为反应式:
library(shiny)
ui <- fluidPage(
sliderInput("input_1", "Input 1", min = 0.1, max = 2, value = 1.1),
numericInput("year_1", "Year 1", value = 1),
verbatimTextOutput("result"),
)
server <- function(input, output, session) {
year_1 <- reactive(input$year_1)
year_2 <- reactive(year_1() * input$input_1)
year_3 <- reactive(year_2() * input$input_1)
year_4 <- reactive(year_3() * input$input_1)
output$result <- renderPrint({
c(year_1(), year_2(), year_3(), year_4())
})
}
shinyApp(ui, server)
如果存在递归模式,使用单个向量可能会更简单:
library(shiny)
ui <- fluidPage(
sliderInput("input_1", "Input 1", min = 0.1, max = 2, value = 1.1),
numericInput("year_1", "Year 1", value = 1),
verbatimTextOutput("result"),
)
server <- function(input, output, session) {
years <- reactive({
values <- numeric(4)
values[1] <- input$year_1
for (i in seq_along(values)[-1]) {
values[i] <- values[i - 1] * input$input_1
}
values
})
output$result <- renderPrint(years())
}
shinyApp(ui, server)
但是 R 中更惯用的方法是找到一个显式公式:
library(shiny)
ui <- fluidPage(
sliderInput("input_1", "Input 1", min = 0.1, max = 2, value = 1.1),
numericInput("year_1", "Year 1", value = 1),
verbatimTextOutput("result"),
)
server <- function(input, output, session) {
years <- reactive({
input$year_1 * input$input_1^(seq_len(4) - 1)
})
output$result <- renderPrint(years())
}
shinyApp(ui, server)