R 模块化应用程序代码
我正在尝试分离我的闪亮应用程序的功能,以使其可重用 我有我的用户界面。R我定义的文件:R 模块化应用程序代码,r,dataframe,module,shiny,reactive,R,Dataframe,Module,Shiny,Reactive,我正在尝试分离我的闪亮应用程序的功能,以使其可重用 我有我的用户界面。R我定义的文件: tabPanel("Unemployed", source("unemployed_select.R", local=TRUE)$value), 在我的失业_select.R中,我定义: fluidPage( titlePanel("Basic DataTable"), # Create a new Row in the UI for selectInputs fluidRow( column(4,
tabPanel("Unemployed", source("unemployed_select.R", local=TRUE)$value),
在我的失业_select.R中,我定义:
fluidPage(
titlePanel("Basic DataTable"),
# Create a new Row in the UI for selectInputs
fluidRow(
column(4,
selectInput("man",
"Manufacturer:",
c("All",
unique(as.character(mpg$manufacturer))))
),
column(4,
selectInput("trans",
"Transmission:",
c("All",
unique(as.character(mpg$trans))))
),
column(4,
selectInput("cyl",
"Cylinders:",
c("All",
unique(as.character(mpg$cyl))))
)
),
# Create a new row for the table.
fluidRow(
DT::dataTableOutput("table")
)
)
我的服务器.R文件是:
library(shiny)
library(shinythemes)
library(dataset)
shinyServer(function(input, output) {
# Filter data based on selections
output$table <- DT::renderDataTable(DT::datatable({
data <- mpg
if (input$man != "All") {
data <- data[data$manufacturer == input$man,]
}
if (input$cyl != "All") {
data <- data[data$cyl == input$cyl,]
}
if (input$trans != "All") {
data <- data[data$trans == input$trans,]
}
data
}))
})
库(闪亮)
图书馆(shinythemes)
库(数据集)
shinyServer(功能(输入、输出){
#根据选择过滤数据
output$table您是对的,您需要使用source()
来加载模块文件,但是对于Shiny,您需要知道名称空间。模块及其源文件必须共享一个名称空间,其中共享了事物的名称。例如,在您的模块代码中,您有以下行:
column(4,
selectInput("man",
"Manufacturer:",
c("All",
unique(as.character(mpg$manufacturer))))
但是您希望模块共享它所包含的文件的名称空间,因此您需要有一种方法让包含模块的文件知道哪些部分是ID,如“man”,哪些部分是严重的参数,如“Manufacturer:”
所以在一个闪亮的模块中,这条线会变成
column(4,
selectInput(ns("man"),
"Manufacturer:",
c("All",
unique(as.character(mpg$manufacturer))))
这里使用ns()
函数将id包含在名称空间中,这将允许应用程序的其余部分使用您声明的id“man”
这里有一个很好的名称空间和编写模块指南:
上面的链接指出,您必须使用命名空间ID,必须使模块适合函数,并使用ui.R
文件中的callModule()
调用该函数,并且必须将所有内容包装在tagList
中,而不是fluidPage
祝你好运!ỳ您的源代码make_df.R
在server.R
中?是的,使用源代码(“make_df.R”)。我甚至尝试在服务器文件夹中创建单独的脚本,试图遵循showmeshiny中的一个示例,但没有成功谢谢Farhan。非常有用