У меня есть блестящее приложение, которое принимает пользовательский ввод:
input$libraries
- это реактивный символьный вектор, полученный пользователем из
output$libraries <- renderUI({
checkboxGroupInput(inputId = "libraries",
label = strong("Select the libraries for which you would like to see part counts"),
choiceValues = LibraryIDs$libraryid,
choiceNames = LibraryNames$name,
selected = LibraryIDs$libraryid[1],
inline = T)}})
})
Я хотел бы выбрать из своей базы данных postgreSQL, у меня есть функция, настроенная так:
get_query <- function(querystring){
# create a connection
# loads the PostgreSQL driver
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname = "RosettaRelational",
host = "localhost", port = 5432,
user = "postgres", password = rstudioapi::askForPassword("Database password"))
on.exit(dbDisconnect(con))
# check for the existance of tables, must be created in pgAdmin4
#dbExistsTable(con, "libraries")
query <- eval(parse(text = querystring))
return(query)
}
Он принимает строку и анализирует ее для оценки запроса
теперь, когда я пытаюсь запросить базу данных как таковую:
Names <- get_query(paste0("con %>% tbl('libraries') %>%
filter(libraryid %in% input$libraries) %>% select(name) %>% collect()"))
Я получаю ошибку: объект 'input' не найден. Я знаю, что он неправильно анализирует вектор реактивных символов. Как я должен изменить это, чтобы заставить это работать?
Я пытался:
Names <- get_query(paste0("con %>% tbl('libraries') %>%
filter(libraryid %in% '",input$libraries,"') %>% select(name) %>% collect()"))
но при этом выбирается только первая библиотека в векторе, даже когда пользователь выбирает несколько библиотек ... это работает, когда на входе $ используется только один символ, например, когда на входе вместо кнопки установлены флажки
В основном, мне нужно, чтобы input$libraries
выглядел как c ('111a,' 111b ',' 211 ',' 311a '), когда он передается в строку, если пользователь выбирает 111a, 111b, 211 и 311a, вместо просто «111a», который он сейчас проходит.