2016-07-29 20 views
0

私はRshinyの初心者ですが、今はダイナミックUIをデザインしようとしています。私のui.Rとserver.Rが添付されています。それはエラーを実行します。これは、異なる年に嵐のデータセットです。ダイナミックUIを作成する方法Rshiny

ui.R 
library(shiny) 
library(hurricaneexposure) 
library(hurricaneexposuredata) 


data("hurr_tracks") 
storms <- unique(hurr_tracks$storm_id) 
storm_years <- as.numeric(gsub(".+-", "", storms)) 
storms <- storms[storm_years <= 2011] 

years <- unique(storm_years) 
years <- years[years<=2011] 


## Split storm_id based on same year 
stm <- split(storms, gsub(".+-", "", storms)) 


shinyUI(fluidPage(

    # Application title 
    titlePanel("Hurricane"), 

    sidebarLayout(
    sidebarPanel(
     selectInput("years",label = "years",years), 

    # This outputs the dynamic UI component 
     uiOutput("ui") 
    ), 
    mainPanel() 
) 

)) 

そして

server.R 
shinyServer(function(input, output) { 

output$ui <- renderUI({ 

switch (input$years, 
    "1988"=selectInput("storm_id",label="storm_id",stm$`1988`) 
) 


}) 

あなたは、UIの部分で見ることができるように。私は変数 "年"と "stm"を作成します。 「年」には、1988年から2011年までのすべての年が含まれます。「stm」は、年に基づいてストームを分割する分割データセットです。

> head(stm) 


$`1988` 
[1] "Alberto-1988" "Beryl-1988" "Chris-1988" "Florence-1988" "Gilbert-1988" "Keith-1988" 
$`1989` 
[1] "Allison-1989" "Chantal-1989" "Hugo-1989" "Jerry-1989"  

私の目標は、名前が「年」と「嵐」の2つの「selectInput」を作成することです。私は1989を選択した場合年間のselectInputで 、私は1988年から2011年まで選択することができ、例えば、2番目のselectInputは

"Allison-1989" "Chantal-1989" "Hugo-1989" "Jerry-1989" 

ある1989年に唯一の嵐、どれでも良い提案が表示されますか?

+0

私も光っていて新しく、この質問もありました。私がしたことは、あなたの入力の変化(すなわち$ yearの入力)に反応し、それに基づいてデータのサブセットを作成する反応的な要素を作成することです。反応の中でdf [df $ year == input $ years]の行に沿ったもの。 – carlo

答えて

1

updateSelectInputは、既にui側でレンダリングされているselectInputsを変更できる機能です。

詳細はthis pageをご覧ください。

これにより、嵐のためにプロキシーselectInputを設定することができます。年入力が変更されたときはいつでも、selectInputの選択肢を正しいものに変更できます。

申し訳ありませんが、あなたのデータセットがないため、私のソリューションをテストできませんでした。しかし、あなたのために働いていない場合は、アイデアを試してコメント+質問してください。

library(shiny) 
library(hurricaneexposure) 
library(hurricaneexposuredata) 

data("hurr_tracks") 
storms <- unique(hurr_tracks$storm_id) 
storm_years <- as.numeric(gsub(".+-", "", storms)) 
storms <- storms[storm_years <= 2011] 

years <- unique(storm_years) 
years <- years[years<=2011] 

## Split storm_id based on same year 
stm <- split(storms, gsub(".+-", "", storms)) 

ui <- shinyUI(fluidPage(
    # Application title 
    titlePanel("Hurricane"), 
    sidebarLayout(
    sidebarPanel(
     selectInput("years", label = "years", years), 
     selectInput("storm_id", label = "Storms", choices = NULL) 
    ), 
    mainPanel() 
) 
)) 

server <- function(input, output, session) { 
    observeEvent(input$years, { 
    updateSelectInput(session, "storm_id", choices = stm[[input$years]]) 
    }) 
} 

shinyApp(ui, server) 
関連する問題