web-dev-qa-db-ja.com

RStudioで複数のファイルにShinyアプリのコードを分割する方法は?

光沢のあるアプリケーションのコードを複数のファイルに分割しようとしましたが、これをShinyで適切に機能させることができません。私の試みは見つけることができます このデモで

コードを複数のファイルに分割しながら、「アプリの実行」ボタンを保持し、RStudioで「コード補完」を元に戻すにはどうすればよいですか?

そうでない場合! ShinyをVisual Studioと統合できますか?

13
Magdy

はい、RStudioの他のすべてのプロジェクトと同じように、これを実現するために提供されているRメカニズムを使用することで、非常に簡単に実現できます。

  • 関数やオブジェクトを個別のファイルで定義します。
  • メインファイルでsource()を使用して、それらの定義をロードします

光沢のある関数のコード補完は、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ファイルをソースとします。

21
Joris Meys

@Joris Meysの回答には、光沢のあるコードをファイルに分割するトピックが含まれていました。質問の一部はrun appボタン。組織が有効な光沢のあるアプリを作成しても使用できない場合があります。

この質問を検索すると、 この問題 を見つけることができます。次に、その問題で行われたコミットに続いて、 run appボタン 、および isShinyAppDirに関するこの関数shinyfiletypeのこの関数

基本的に、どのフォルダにもui.Rserver.Rapp.Rglobal.Rwwwフォルダーは光沢のあるフォルダーと見なされます(詳細な条件はより複雑です。ソースコードを参照してください)。上記の4つのファイルにはrun appボタン。

私が気づいたことの1つは、通常はアプリを実行したままにして、次にいくつかの変更を加えることができるということですreload app変更を確認しますが、他のファイルを入手した場合はreload appボタンは、そのソースファイルの変更を再ロードしません。

1
dracodoc