Shiny documentation はselectInput()
について言及しています:
selected
デフォルトで選択されるナビゲーション項目の値(または、何も指定されていない場合はタイトル)。 NULLの場合、最初のナビゲーションが選択されます。
デフォルトで選択リストから値を選択したくない場合はどうなりますか?
実際、私の選択値はデフォルトで選択されており、アプリの残りの部分は自動的に実行されています。ただし、最初は値を選択したくありません。そのためには、selectInput()
のselected
引数に何を指定すればよいですか?
確かに、何も自動的に選択されたくありません。以下のコードを使用しましたが、それでもリストから利用可能な最初の値を選択しています。デフォルトでは何も選択しないようにしたいので、ユーザーは任意のオプションを選択できます。
output$Choose_App <- renderUI({
selectInput("app",
"Select App:",
choices = as.character(mtrl_name),
selected = NULL ,
multiple = FALSE
)
})
documentation をたどると、multiple=TRUE
を選択した場合にのみ、選択が空になることに気付きました。これは正しいです?
multiple=TRUE
に変更すると、デフォルトで選択されないため、これが必要です。しかし、残念ながら選択を行う前に、次のエラーメッセージも表示されます。
ERROR: bad 'file' argument
私が何か間違ったことをしている場合、誰かがこれについて知っていますか?しかし、このファイルを選択すると、エラーはなくなります。
これには次のコードを使用しています。
# server.R
setwd("/opt/shiny-server/samples/sample-apps/P-Dict_RDS2")
mtrl_name <- try(system("ls | grep -i .rds", intern = TRUE))
shinyServer(function(input, output) {
# First UI input (Service column) filter clientData
output$Choose_Molecule <- renderUI({
selectInput("molecule",
"Select Molecule:",
choices = as.character(mtrl_name),
selected = input$molecule,
multiple = TRUE
)
})
Select入力の代わりにselectize入力を使用できます。一部のカスタムselectizeオプションを使用して、初期選択を空に設定できます。 例 は、Shiny Galleryで提供されています。特に、例6を参照してください。
# make sure you have shiny >= 0.9.1
selectizeInput(
'e6', '6. Placeholder', choices = state.name,
options = list(
placeholder = 'Please select an option below',
onInitialize = I('function() { this.setValue(""); }')
)
)
ところで、エラー"ERROR: bad 'file' argument"
、あなたのアプリのソースコードを見ずに誰かがあなたを助けることができるとは思いません、そしてそれは別の質問かもしれません。
同様の問題に直面しました。私が見つけた解決策は、@ MKaの答えに基づいています。コードが複数の値を処理できない場合は、multiple = Tを設定しないでください。私が提案するのは:
selectInput("molecule",
"Select Molecule:",
choices = c("",as.character(mtrl_name)),
selected = NULL,
multiple = F
)
選択した値を取得するには:
if(!is.null(input$molecule))
{
if(nchar(input$molecule)>1)
{
#do your thing..
}
}
私の問題を修正しました。より良い解決策を見つけた場合はお知らせください。
空の文字列を選択リストに追加することで回避できると思います。
selectInput("app",
"Select App:",
choices = c("", as.character(mtrl_name)),
selected = NULL,
multiple = FALSE)
@Yihui Xieの answer にはselectInput(..., selectize = TRUE)
が必要です。 selectize = FALSE
が必要な場合でも、次のように同様の効果を得ることができます。
これは 文書化 ではありません:
selected
最初に選択された値(またはmultiple = TRUE
の場合は複数の値)。指定しない場合、デフォルトでは単一選択リストの最初の値になり、複数選択リストの値はありません。
ただし、単一選択リストでselectize = FALSE, size = 4
を使用できる場合(NULL
以外のサイズでも機能します)、selected = FALSE
を設定してデフォルトの選択を強制しないことができます。
library(shiny)
# Define UI for application that draws a histogram
ui <- fluidPage(
mainPanel(
uiOutput("Choose_Molecule")
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
# First UI input (Service column) filter clientData
output$Choose_Molecule <- renderUI({
selectInput("molecule",
"Select Molecule:",
choices = rownames(mtcars),
selected = FALSE,
multiple = FALSE
, selectize = FALSE, size = 4 ##needed for `selected = FALSE` to work
)
})
}
# Run the application
shinyApp(ui = ui, server = server)