1

再利用可能にするために、Shiny アプリケーションの機能を分離しようとしています。

私は私のUIを持っています。私が定義するRファイル:

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内での定義に問題があると思います。

何か案は?

よろしく

4

1 に答える 1

1

モジュール ファイルをロードするために を使用する必要があることは正しいですが、Shiny では名前空間source()に注意する必要があります。モジュールとそれが供給されているファイルは名前空間を共有する必要があり、そこでは物事の名前が共有されます。たとえば、モジュール コードには次の行があります。

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

ただし、モジュールが含まれているファイルの名前空間を共有する必要があるため、モジュールを含むファイルに、「man」などの id と深刻な部分を認識させる方法が必要です。 「メーカー:」などの引数

したがって、光沢のあるモジュールでは、その行は次のようになります

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

ここでは、ns()関数を使用して名前空間に id を含めます。これにより、宣言された id "man" をアプリの残りの部分で使用できるようになります。

名前空間と Shiny でのモジュールの記述に関する優れたガイドがここにあります。

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

上記のリンクは、名前空間 ID が必要であり、モジュールを関数に適合させ、ファイルから使用callModule()してその関数を呼び出す必要があり、すべてをではなく でui.Rラップする必要があることを示しています。tagListfluidPage

頑張ってください!

于 2017-01-07T05:51:59.630 に答える