R中的搜索栏模块如何返回结果
我正在尝试创建一个闪亮的模块,它将基于自定义搜索栏更改数据表 我设法制作了一个应用程序,将搜索栏搜索的结果打印到R-Studio控制台,但是,如何从模块返回结果并更新反应式数据存储 下面是一个示例应用程序,我想返回打印的内容以更新响应:R中的搜索栏模块如何返回结果,r,shiny,R,Shiny,我正在尝试创建一个闪亮的模块,它将基于自定义搜索栏更改数据表 我设法制作了一个应用程序,将搜索栏搜索的结果打印到R-Studio控制台,但是,如何从模块返回结果并更新反应式数据存储 下面是一个示例应用程序,我想返回打印的内容以更新响应: myModuleUI <- function(id) { ns <- NS(id) tagList( fluidRow( column(width=2, textInput(ns("sea
myModuleUI <- function(id) {
ns <- NS(id)
tagList(
fluidRow(
column(width=2,
textInput(ns("searchField"), "Search"),
dataTableOutput("table")
)
)
)
}
myModule <- function(input, output, session, df) {
observeEvent(input$searchField, {
if(!is.null(input$searchField)){
print(
df %>% filter_at(vars(names(df)), any_vars(str_detect(as.character(.), input$searchField)))
)
}
})
}
# Use the module in an application
ui <- fluidPage(
myModuleUI("myModule1")
)
server <- function(input, output, session) {
out <- reactiveValues(
df = data.frame(
company = c('a', 'b', 'c', 'd'),
bond = c(0.2, 1, 0.3, 0),
equity = c(0.7, 0, 0.5, 1),
cash = c(0.1, 0, 0.2, 0),
stringsAsFactors = FALSE
)
)
callModule(myModule, "myModule1", df = out$df)
output$table <- DT::renderDataTable({
m <- datatable(
out$df,
options = list(dom = 'tip')
)
})
}
shinyApp(ui, server)
myModuleUI您也必须在datatableOutput outputId上使用ns()
,因此您可以在模块中使用它:
myModuleUI <- function(id) {
ns <- NS(id)
tagList(
fluidRow(
column(width=2,
textInput(ns("searchField"), "Search"),
dataTableOutput(ns("table"))
)
)
)
}
myModule <- function(input, output, session, df) {
output$table <- DT::renderDataTable({
datatable(
if(!is.null(input$searchField)){
df %>% filter_at(vars(names(df)), any_vars(str_detect(as.character(.), input$searchField)))
} else df,
options = list(dom = 'tip')
)
})
}
# Use the module in an application
ui <- fluidPage(
myModuleUI("myModule1")
)
server <- function(input, output, session) {
out <- reactiveValues(
df = data.frame(
company = c('a', 'b', 'c', 'd'),
bond = c(0.2, 1, 0.3, 0),
equity = c(0.7, 0, 0.5, 1),
cash = c(0.1, 0, 0.2, 0),
stringsAsFactors = FALSE
)
)
callModule(myModule, "myModule1", df = out$df)
}
shinyApp(ui, server)
myModuleUI