【发布时间】:2021-11-24 14:55:25
【问题描述】:
我有一种情况,我想要一个按钮,例如“添加通过”,然后用户可以在距离计算中添加多个通过选项来查看两点之间的距离。 我在其他地方读过如何读取多个文本框以添加数据。但是,我不清楚如何将多个文本框的输出读取到函数中。
如何为多个文本框使用“通过”选项?
当前代码如下。
airport_distance_1 <- function(departing_airport_code, arriving_airport_code, via = NULL){
airports <- c(departing_airport_code, via, arriving_airport_code)
if (length(airports) == 2) {
distance <- airportr::airport_distance(airports[1], airports[2])
} else {
distance1 <- NULL
for (m in 2:length(airports)-1){
distance1[m] <- airportr::airport_distance(airports[m], airports[m+1])
}
distance <- sum(distance1)
}
return(distance)
}
ui <- shinyUI(fluidPage(
sidebarPanel(
textInput(inputId = "from_airport", label = "From:", value = "LAX", width = "41%"),
textInput(inputId = "to_airport", label = "To:", value = "LHR", width = "41%"),
h4("Via:"),
actionButton("add_btn", "+"),
actionButton("rm_btn", "-"),
textOutput("counter")
),
mainPanel(uiOutput("textbox_ui"),
splitLayout(textOutput("calc")))
))
server <- shinyServer(function(input, output, session) {
# Track the number of input boxes to render
counter <- reactiveValues(n = 0)
observeEvent(input$add_btn, {counter$n <- counter$n + 1})
observeEvent(input$rm_btn, {
if (counter$n > 0) counter$n <- counter$n - 1
})
#output$counter <- renderPrint(print(counter$n))
textboxes <- reactive({
n <- counter$n
if (n > 0) {
lapply(seq_len(n), function(i) {
textInput(inputId = paste0("textin", i),
label = paste0("Variable", i), value = "")
})
}
})
output$textbox_ui <- renderUI({ textboxes() })
summary_calc <- reactive(
airport_distance_1(departing_airport_code = input$from_airport,
arriving_airport_code = input$to_airport,
via = input$Variable1)
)
output$calc <- renderText({
summary_calc()
})
})
shinyApp(ui, server)
理想情况下,我希望能够阅读,比如说,
airport_distance_1("LAX", "LHR", via = c("NBO", "DUB"))
非常感谢。
【问题讨论】: