質問
複数選択入力で選択された項目の数に応じて、光沢のあるアプリのコンテンツを表示したいと考えています。これまでのところ、これを機能させるための条件がどのようなものであるかを理解できませんでした。
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("select and conditional panel"),
sidebarPanel(
selectInput(inputId = "someSelect", multiple=TRUE, label = "Genes:", choices = colnames(someDataFrame), selected = c("ESR1", "CD44")),
),
mainPanel(
conditionalPanel(
condition="length(input.someSelect.selected) > 2",
tabsetPanel(
...
)
)
)
))
解決
条件パネルの状態にR関数を使用することはできません。私はあなたの状態があるべきだと思います:input.someSelect.length > 2
他のヒント
おそらく味の問題ですが、JavaScriptロジックにRコードに入るため、ConditionalPanel構文が好きではありません。代わりに、私は動的UIを生成することができるUIOUTPUT(およびそれぞれのRenderUI)を好む。ConditionalPanelはかなり簡単な条件のみを処理できるが、動的UIアプローチはより複雑な論理に基づいている条件外観を生み出し、Rの電力を利用することができる。 しかしながら、変化に対応することはわずかに遅いです。
このアプローチを使用する場合、あなたのui.rは次のように見えるべきです:
mainPanel(uiOutput("myConditionalPanel"))
.
とあなたのServer.rは次のようになります。
output$myConditionalPanel = renderUI({
if(length(input$someSelect)>2) {
## some ui definitions here. for example
tabsetPanel(
...
)
} else {
## some alternative definitions here...
}
})
. これが私と同じ問題を抱えている他の人に役立つことを願っています...
上記の回答を使用すると、selectInput で 2 つ以上の項目が選択された場合にのみconditionalPanel を表示しようとすると問題が発生しました。uiOutput/renderUi メソッドにはバグがあり、次の条件がありました input.someSelect.length > 1
selectInput で何も選択されていない場合でも、conditionalPanel が表示されました。
ConditionPanel では、selectInput が定義されているかどうかを確認する条件を含める必要がありました。
"input.someSelect != undefined && input.someSelect.length > 1"