我尝试将闪存应用程序的代码拆分为不同的文件,但无法在Shiny中使其正常工作。我的尝试可以找到in this demo
如何将代码拆分为不同的文件,但仍保留“运行应用程序按钮”并在RStudio中重新启用“代码完成”?
如果没有!我能用Visual Studio整合闪亮吗?
答案 0 :(得分:19)
是的,您可以通过与RStudio中的其他项目相同的方式轻松实现这一目标:通过使用提供的R机制来实现:
闪亮函数的代码完成仅在使用library(shiny)
加载闪亮包时在RStudio中发生。应用程序中的主文件将显示“运行应用程序”按钮。在下面的示例中,这将是 app.R 文件。因此,如果您想从RStudio中运行您的应用程序,您必须返回主文件。
一个例子:
在文件 app.R 中,您输入:
library(shiny)
source('myUI.R', local = TRUE)
source('myServer.R')
shinyApp(
ui = myUI,
server = myserver
)
除了启动对象myUI
和myserver
并调用应用程序外,此代码不执行任何操作。
myUI.R 文件包含
source('Tabs.R')
myUI <- shinyUI({
fluidPage(
tabsetPanel(
Tab1,
Tab2
)
)
})
此文件定义app.R中使用的UI
对象。函数tabsetPanel
将许多tabPanel作为参数。这些tabPanel在以下文件(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 文件。
答案 1 :(得分:1)
run app
按钮,即使组织制作有效的闪亮应用程序,也可能无法使用该按钮。
如果您搜索此问题,可以找到this issue,然后按照该问题中的提交进行操作,您可以找到what's the rule to have a run app
button和this function about isShinyAppDir
,this function of shinyfiletype:
基本上任何文件夹都有ui.R
,server.R
,app.R
,global.R
,www
文件夹将被视为闪亮文件夹(详细条件较为复杂) ,请参阅源代码),然后上面的4个文件将有run app
按钮。
我注意到的一件事是,通常你可以保持应用程序运行,然后进行一些更改reload app
以查看更改,但是如果您获取其他文件,reload app
按钮将不会重新加载更改来源文件。