Closed. This question needs details or clarity。它当前不接受答案。












想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。

3年前关闭。



Improve this question




我试图将代码拆分成一个 Shiny 的应用程序,并将其拆分到不同的文件中,但是无法使其在Shiny中正常工作。我的尝试可以找到in this demo

如何在不同的文件中拆分代码,但仍保留“运行应用程序按钮”,并在RStudio中恢复“代码完成”功能?

如果不 !我可以将Shiny与Visual Studio集成吗?

最佳答案

是的,您可以使用与RStudio中其他所有项目相同的方式非常轻松地实现这一目标:通过使用提供的R机制来实现这一目标:

  • 在单独的文件中定义函数和/或对象。
  • 在主文件中使用source()加载其定义

  • 仅当使用library(shiny)加载 Shiny 包时, Shiny 功能的代码完成才会在RStudio中发生。对于应用程序中的主文件,“运行应用程序”按钮将可见。在下面的示例中,该文件将是 app.R 文件。因此,如果要在RStudio中运行应用程序,则始终必须返回到主文件。

    标准示例

    一个例子 :

    在文件 app.R 中,您将:
    library(shiny)
    source('myUI.R', local = TRUE)
    source('myServer.R')
    
    
    shinyApp(
      ui = myUI,
      server = myserver
    )
    

    该代码除了启动对象myUImyserver并调用该应用程序外,不会执行其他任何操作。

    文件 myUI.R 包含
    source('Tabs.R')
    myUI <- shinyUI({
      fluidPage(
        tabsetPanel(
          Tab1,
          Tab2
        )
      )
    })
    

    该文件定义了app.R中使用的UI对象。函数tabsetPanel使用许多tabPanels作为参数。这些tabPanels是在以下文件(Tabs.R)中创建的,因此在构造UI之前必须先找到其中一个。

    文件 Tabs.R 包含:
    Tab1 <- tabPanel("First Tab",
                     selectInput("select",
                                 "Choose one",
                                 choices = letters[1:3],
                                 selected = 'a'))
    
    Tab2 <- tabPanel("Second Tab",
                     textOutput('mychoice'))
    

    此文件创建要添加到tabsetPanel的tabPanel对象。在我自己的代码中,我将每个tabPanel定义存储在单独的文件中。

    文件 myServer.R 包含:
    myserver <- function(input,output,session){
      output$mychoice <- renderText(
        input$select
      )
    }
    

    并且,如果需要,您可以再次创建具有可在服务器功能内使用的功能的单独文件。但是,您始终必须遵循经典的R逻辑:将事物分配给一个对象,并在您要插入该对象的位置引用该对象。

    您也可以直接在server()函数内部获取源代码。在这种情况下,您应该使用source(..., local = TRUE)从本地获取资源,因此创建的对象包含在server函数内部。另请参阅:https://shiny.rstudio.com/articles/scoping.html

    使用模块

    如果您想保留一个缺口并重用某些逻辑和布局(例如,应该附加到某些绘图的绘图选项控制面板),则应转到模块。 (另请参阅http://shiny.rstudio.com/articles/modules.html)

    模块可以再次存储在单独的文件中,并且该文件来源于 app.R 文件。

    07-24 09:50
    查看更多