R Shinyでグローバル変数をどのように宣言して、同じコードを複数回実行する必要がないようにしますか?非常に単純な例として、まったく同じデータを使用する2つのプロットがありますが、一度だけデータを計算したいだけです。
i.Rファイルは次のとおりです。
_library(shiny)
# Define UI for application that plots random distributions
shinyUI(pageWithSidebar(
# Application title
headerPanel("Hello Shiny!"),
# Sidebar with a slider input for number of observations
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot1"),
plotOutput("distPlot2")
)
))
_
server.Rファイルは次のとおりです。
_library(shiny)
shinyServer(function(input, output) {
output$distPlot1 <- renderPlot({
dist <- rnorm(input$obs)
hist(dist)
})
output$distPlot2 <- renderPlot({
dist <- rnorm(input$obs)
plot(dist)
})
})
_
_output$distPlot1
_と_output$distPlot2
_の両方が、同じコードを2回再実行するdist <- rnorm(input$obs)
を行うことに注意してください。 「dist」ベクトルを1回実行し、すべてのrenderplot関数で使用できるようにするにはどうすればよいですか?私はdistを次のような関数の外側に配置しようとしました:
_library(shiny)
shinyServer(function(input, output) {
dist <- rnorm(input$obs)
output$distPlot1 <- renderPlot({
hist(dist)
})
output$distPlot2 <- renderPlot({
plot(dist)
})
})
_
しかし、「dist」オブジェクトが見つからないというエラーが表示されます。これは実際のコードのおもちゃの例です。複数の「レンダリング」機能に貼り付けるコードが50行あります。何か助け?
このコードを実行する場合は、ファイルを作成して実行するだけです。library(shiny)getwd()runApp( "C:/ Desktop/R Projects/testShiny")
ここで、「testShiny」は私のRスタジオプロジェクトの名前です。
Shiny webpage のこのページでは、Shiny変数のスコープについて説明しています。
グローバル変数は、server.R
(リカードの回答による)またはglobal.R
。
Global.Rで定義されたオブジェクトは、shinyServer()以外のserver.Rで定義されたオブジェクトと似ていますが、1つの重要な違いがあります。これらは、ui.Rのコードにも表示されます。これは、Rセッションのグローバル環境にロードされるためです。 ShinyアプリのすべてのRコードは、グローバル環境またはその子で実行されます。
実際には、server.Rとui.Rの間で変数を共有する必要があることは多くありません。 ui.Rのコードは、Shinyアプリの起動時に1回実行され、キャッシュされて接続する各Webブラウザーに送信されるHTMLファイルを生成します。これは、一部の共有構成オプションの設定に役立つ場合があります。
上記の@nicoにリストされているリンクで述べたように、関数内で<<-分類子を使用して、関数の外部から変数にアクセスできるようにすることもできます。
foo <<- runif(10)
の代わりに
foo <- runif(10)
リンクには、「オブジェクトが変更されると、変更されたオブジェクトがすべてのユーザーセッションで表示されます。ただし、<-演算子はローカルの値のみを割り当てるため、<<-代入演算子を使用してbigDataSetを変更する必要があります環境。"
これを使用して、光沢のあるさまざまなレベルの成功を収めました。いつものように、グローバル変数には注意してください。