单独的 server.R 和 ui.R 文件中的模块
Posted
技术标签:
【中文标题】单独的 server.R 和 ui.R 文件中的模块【英文标题】:Modules in separated server.R and ui.R files 【发布时间】:2020-01-20 15:03:40 【问题描述】:是否可以在单独的 app.R、server.R 和 ui.R 文件中写下的 Shiny App 中创建模块?
我找到的所有示例都是一个 app.R 文件,其中包含嵌入式服务器和 ui 函数。请参阅example 1、example 2!、示例 3!
(我从最后一个示例中获取了该测试的代码)。
我试图运行这个应用程序:
app.R
library(shiny)
# load module functions
source("hello_world.R")
# Run the application
shinyApp(ui = ui, server = server)
ui.R
#ui.R
library(shiny)
#source("hello_world.R")
ui <- fluidPage(
titlePanel("Using of Shiny modules"),
fluidRow(
# Call interface function of module "hello_world"
hello_worldUI(id = "id_1")
)
)
服务器.R
#server.R
library(shiny)
source("hello_world.R")
server <- function(input, output, session)
# Call logic server function of module "hello_world"
callModule(module = hello_world, id = "id_1")
# UPDATE! -> my Error comes from this line of code in server.R file:
#shinyApp(ui = ui, server = server)
#Removing the line above solve the problem.
hello_world.R
#module 1: hello_world
# Function for module UI
hello_worldUI <- function(id)
ns <- NS(id)
fluidPage(
fluidRow(
column(2, textInput(ns("TI_username"), label = NULL, placeholder = "your name")),
column(2, actionButton(ns("AB_hello"), label = "Hello !"))
),
hr(),
fluidRow(
column(12, textOutput(ns("TO_Hello_user")))
)
)
# Function for module server logic
hello_world <- function(input, output, session)
# When user clicks on "Hello" button : Update reactive variable "name"
name <- eventReactive(input$AB_hello,
return(input$TI_username)
)
# Show greetings
output$TO_Hello_user <- renderText(
if (name() %in% "")
return("Hello world !")
else
return(paste("Hello", name(), "!"))
)
但是我收到了这个错误:
警告:有效错误:找不到对象“ui” 52:力 51: uiHttpHandler 50:闪亮应用 force(ui) 中的错误:找不到对象 'ui'
【问题讨论】:
我更新了答案,所以现在应该是正确的。 【参考方案1】:应用程序不知道ui
和server
对象,除非您在同一文件中定义它们并且它们是在运行时生成的,或者您在shinyApp()
之前从外部文件显式调用它们。如下更改您的app.R
,它应该可以工作:
library(shiny)
# load module functions
source("hw.R")
# load ui elements
source("ui.R")
# load server function
source("serv.R")
# Run the application
shinyApp(ui = ui, server = server)
【讨论】:
目前有人给了我这个链接,它包含了我需要的所有东西。我基于此更新了我的答案。 shiny.rstudio.com/articles/two-file.html以上是关于单独的 server.R 和 ui.R 文件中的模块的主要内容,如果未能解决你的问题,请参考以下文章
ui 和服务器脚本作为一个脚本运行,运行良好。但是在不同的文件 ui.R 和 server.R 中运行脚本会引发错误
shinydashboard ui.R 和 server.R 未读取 Global.R
如何在 ui.R 中读取 TextInput,在 global.R 中使用此值处理查询并使用 Shiny 在 server.R 中显示