Shiny应用server端导入外部R文件报错:input对象未找到求助
解决Shiny Server端导入外部代码的报错问题
你遇到的问题是因为source()默认在全局环境执行代码,而input是Shiny Server函数的局部变量,全局环境里找不到它,所以触发了object 'input' not found的错误。下面是两种可行的解决办法:
方法一:添加local=TRUE参数
直接修改app.R中的source调用,加上local=TRUE参数,让外部文件的代码在Server函数的局部环境中执行:
修改后的app.R
ui <- dashboardPage( dashboardHeader(title = "Basic dashboard"), dashboardSidebar(sidebarMenu(menuItem("Accueil", tabName = "dashboard", icon = icon("dashboard")))), dashboardBody(tabItems(tabItem(tabName = "dashboard", actionButton("button", "button")))) ) server <- function(input, output, session) { source(file = "button.R", local = TRUE) # 新增local=TRUE参数 } shinyApp(ui = ui, server = server)
button.R保持原有代码即可,这样observeEvent就能正常访问Server函数内的input对象。
方法二:将外部代码封装为函数
把button.R里的逻辑封装成一个接收input、session参数的函数,再在Server中调用这个函数,这种方式更适合复杂应用的模块化管理:
修改后的button.R
setupButton <- function(input, session) { observeEvent(input$button, { print("clicked") }) }
修改后的app.R
ui <- dashboardPage( dashboardHeader(title = "Basic dashboard"), dashboardSidebar(sidebarMenu(menuItem("Accueil", tabName = "dashboard", icon = icon("dashboard")))), dashboardBody(tabItems(tabItem(tabName = "dashboard", actionButton("button", "button")))) ) server <- function(input, output, session) { source(file = "button.R") setupButton(input, session) # 调用封装好的函数 } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者dia05
相关产品推荐
相关产品推荐

