#r #input #shiny #reactive
Вопрос:
Я пытаюсь создать блестящее приложение, которое подключается к базе данных, но IP-адрес и т. Д. могут быть изменены пользователем.
Короче говоря, я просто хочу знать, возможно ли создать блестящее приложение с объектами из частей сервера реактивации, включенными во входы выбора пользовательского интерфейса.
Подобный этому:
library(shiny)
ui <- fluidPage(
selectizeInput(inputId = 'inSelect',
label = "countries",
choices = getTable(),
multiple = TRUE,
options = list(maxItems = 4,
placeholder = 'select up to 4 countries')
)
)
server <- function(input, output) {
getTable <- reactive({
country <- data.frame(name=c("Germany","France","Japan"),
code=c("DEU","FRA","JPN"))
countryN <- country$code
names(countryN) <- country$name
})
}
shinyApp(ui = ui, server = server)
когда это работает, это должно выглядеть так:
Я знаю, что могу достичь этого эффекта, просто создав DF перед пользовательским интерфейсом, но моя реальная проблема немного сложнее:
Я хочу, чтобы пользователь ввел IP,имя пользователя, PW и имя базы данных, чтобы подключиться к базе данных. После нажатия кнопки соединение должно быть установлено, и df. страна должна быть извлечена из базы данных, а не создана. Я думаю, что я должен выполнить эту часть в (реактивной) серверной части, потому что я использую ввод$x в соединении с БД.
Я надеюсь, что мое видение каким-то образом возможно, и вы, ребята, сможете мне помочь, спасибо.
Ответ №1:
вы можете использовать updateSelectInput()
для обновления выбранного ввода со стороны сервера приложения. Дополнительная информация приведена здесь: https://shiny.rstudio.com/reference/shiny/1.2.0/updateSelectInput.html
в вашем конкретном примере вы можете достичь этого,:
library(shiny)
ui <- fluidPage(
selectizeInput(inputId = 'inSelect',
label = "countries",
choices = NA,
multiple = TRUE,
options = list(maxItems = 4,
placeholder = 'select up to 4 countries')
)
)
server <- function(input, output,session) {
getTable <- reactive({
country <- data.frame(name=c("Germany","France","Japan"),
code=c("DEU","FRA","JPN"))
countryN <- country$code
names(countryN) <- country$name
return(country)
})
observe({updateSelectInput(session, inputId="inSelect", label = NULL, choices = getTable()$name,
selected = NULL)})
}
shinyApp(ui = ui, server = server)
добавляя аргумент session
к функции сервера, а затем используя updateSelectInput()
функцию, это должно быть завернуто в реактивное выражение в этом примере, который я использовал observe()