2017-01-06 9 views
1

シャイニーアプリケーションを再利用可能にするために、シャイニーアプリケーションの機能を分離しようとしています。シャイニーRアプリケーションコードのモジュール化

私は私は持っています。 R Iは、定義ファイル

tabPanel("Unemployed", source("unemployed_select.R", local=TRUE)$value), 

と私のunemployed_select.Rで私が定義します

fluidPage(
titlePanel("Basic DataTable"), 

# Create a new Row in the UI for selectInputs 
fluidRow(
column(4, 
     selectInput("man", 
        "Manufacturer:", 
        c("All", 
        unique(as.character(mpg$manufacturer)))) 
), 
column(4, 
     selectInput("trans", 
        "Transmission:", 
        c("All", 
        unique(as.character(mpg$trans)))) 
), 
column(4, 
     selectInput("cyl", 
        "Cylinders:", 
        c("All", 
        unique(as.character(mpg$cyl)))) 
) 
), 
# Create a new row for the table. 
fluidRow(
DT::dataTableOutput("table") 
) 
) 

マイserver.Rファイルは次のとおりです。

library(shiny) 
library(shinythemes) 
library(dataset) 

shinyServer(function(input, output) { 

# Filter data based on selections 
output$table <- DT::renderDataTable(DT::datatable({ 
data <- mpg 
if (input$man != "All") { 
    data <- data[data$manufacturer == input$man,] 
} 
if (input$cyl != "All") { 
    data <- data[data$cyl == input$cyl,] 
} 
if (input$trans != "All") { 
    data <- data[data$trans == input$trans,] 
} 
data 
})) 


})  

私が使用しましたRギャラリーの有名な例のコードhttps://shiny.rstudio.com/gallery/basic-datatable.html

データの問題がないことを確認してください。まだデータレンダリングはレンダリングされていないので、ソースファイルを定義する際に問題がなければならないと思います。unemployed_select.R

アイデア?

よろしく

+1

'server.R'の' make_df.R'をソースしますか? –

+0

はいローマ字( "make_df.R")を使用しています。私はサーバーフォルダ内に別のスクリプトを作成しようとしましたが、showmeshinyの例に従ってみましたが成功しませんでした – user1997567

答えて

1

あなたは、あなたのモジュールファイルをロードするためにsource()を使用する必要があることを右ですが、ピカピカで、あなたは名前空間を認識する必要があります。モジュールとそれがソースになっているファイルは、名前空間を共有しなければなりません。名前空間は共有されます。たとえば、あなたのモジュールのコードでは、この行があります。

column(4, 
    selectInput("man", 
       "Manufacturer:", 
       c("All", 
       unique(as.character(mpg$manufacturer)))) 

をしかし、あなたは、ファイルを、できるようにする方法を持っている必要がありますので、モジュールは、それが中に含まれているファイルの名前空間を共有したいです「男」のようなIDS、であり、どの部分のような深刻な引数でどの部分を知って、モジュールを含むある「製造者:」

だからシャイニーモジュールでは、その行が

column(4, 
    selectInput(ns("man"), 
       "Manufacturer:", 
       c("All", 
       unique(as.character(mpg$manufacturer)))) 

ここns()なります関数は、名前空間にidを含めるために使用されます。あなたの宣言されたid "男"は、残りのアプリケーションで使用できるようにします。

ここシャイニーで名前空間と書き込みモジュールへの偉大なガイドがあります:

https://shiny.rstudio.com/articles/modules.html

上記のリンクを使用して、機能にあなたのモジュールのフィット感を作成し、その関数を呼び出す必要があり、IDを名前空間なければならないことを指摘しますをui.Rファイルから使用し、の代わりにtagListにすべてをラップする必要があります。

運が良かった!

+0

ありがとうFarhan。非常に便利 – user1997567

関連する問題