2017-03-20 19 views
0

私は、特定のデータセットのデータをマッピング/可視化するためのさまざまなオプションを含むShinyアプリケーションを構築しています。私はselectInputを持っています。ここでは、ユーザーが視覚化したいデータセットから変数を選択します。条件付きシャインの条件:データセット内の変数のクラスに基づく条件

conditionalPanelは、ユーザーが数値変数を選択したときに表示されます。

私はそれが非常に簡単だと確信していますが、私はconditionalPanelという条件引数を書くのに問題があります。私はJavascriptに慣れていません。 R言語ではis.numeric()を使うことができましたが、私はJavascriptでそれを行う方法に慣れていません。私はcondition = "isNaN(input.variables) == FALSE"を試しましたが、これは変数の名前が数字であるかどうかをテストするもので、データは含まれていません。

this tutorialのように、サーバー側で反応式を使用してRで条件を書くことはできますが、計算量が多いので避けたいと思います。

ご協力いただければ幸いです。

下記のサンプルコード。明らかにするには、 "nums"変数が選択されている(数値データを含む)ときだけラジオボタンが表示され、 "letters"変数が選択されているときはラジオボタンは表示されません。

letters <- c("a","b","c") 
nums <- 1:3 
dat <- data.frame(letters,nums) 

ui <- fluidPage(
    sidebarPanel(
    selectInput("variables", h4("Pick variable to plot:"), choices = colnames(dat)), 
    conditionalPanel( 
     condition = "isNaN(input.variables) == FALSE", 
     radioButtons("seq_div", "Colours should be...", c("sequential", "divergent")) 
    ) 
), 
    mainPanel() 
) 

shinyApp(ui = ui, server = server) 
+0

データフレーム内のどの変数が数値か分かりませんか? –

+0

「偽」(小)ですが、それを修正しません... – mRcSchwering

+0

フェアポイント豚チョップ!私が今作業しているデータセットでは、どの列が数値か分かります。しかし、最終的に私はユーザーが数字でもカテゴリでもよい自分のデータをアップロードできるようにしたいと思っています。それをもっと鮮明にしないと申し訳ありません。 また、はい、あなたは正しいですmRcSchwering! "isNaN(input.variables)== false"を読み込む必要があります。私の悪い。 –

答えて

1

あなたが行うことができます(私はここケースだと思うもの)の数値である列を事前に知っていない場合:

letters <- c("a","b","c") 
nums <- 1:3 
num2 <- 4:6 
dat <- data.frame(letters,nums, num2) 

numeric_cols = paste("'",colnames(dat)[sapply(dat, is.numeric)],"'", collapse = ',', sep = '') 

ui <- fluidPage(
    sidebarPanel(
     selectInput("variables", h4("Pick variable to plot:"), choices = colnames(dat)), 
     conditionalPanel( 
      condition = paste0("[", numeric_cols, "].indexOf(input.variables) >= 0"), 
      radioButtons("seq_div", "Colours should be...", c("sequential", "divergent")) 
     ) 
    ), 
    mainPanel() 
) 

server <- shinyServer(function(input, output) { 
}) 

shinyApp(ui = ui, server = server) 

それは基本的に列が数値である見つけ、Aに貼り付けますJS配列フォームを開き、選択した項目が配列内にあるかどうかを確認します。

関連する問題