2016-09-15 9 views
0

私は、データフレームからのデータの1行を表示したいselectizeInput()入力に応じて、アイデア文を取り除く場合:引数が長さゼロ

は次のとおりです。場合にエラーが発生しました。ただし、一部の変数は、値がFALSEでない場合にのみ表示されます。 selectizeInput()にはプレースホルダプロンプトが含​​まれています。いずれかのオプションが非常に望ましくないアプリ、内側に表示さ

Error in if: argument is of length zero

を選択されるまで

問題

私が実際に開発されたコードがなく、動作します。

例コード

library("shiny") 

# simulate data 
data <- data.frame(
    name = c("Adam", "Debbie", "Lancelot", "Dracula"), 
    age = c(21, 48, 72, 1023), 
    coward = c("yes, a coward", "just a little bit", FALSE, "too old to be a coward") 
) 

ui <- fluidPage(
    # selectize 
    selectizeInput(
    inputId = "input", 
    label = NULL, 
    choices = c("..." = "", as.character(data[, "name"])), 
    selected = NULL, 
    multiple = FALSE 
), 
    # show output 
    uiOutput(outputId = "output") 
) 

server <- function(input, output, session){ 
    output$output <- renderUI({ 
    div(
     # show name 
     data[which(input$input == data[, "name"]), "name"], br(), 
     data[which(input$input == data[, "name"]), "age"], br(), 
     # if "coward" is not FALSE than show its value 
     if(data[which(input$input == data[, "name"]), "coward"] != FALSE){ 
     data[which(input$input == data[, "name"]), "coward"] 
     } 
    ) 
    }) 
} 

shinyApp(ui, server) 

未遂ソリューション

suppressWarnings()またはsuppressMessages()if()声明をラップしようとしました。何も変わらない。またif()条件内!is.null(input$input) &&を入れてみましたが、それはただshinyselectizeInput()でオプションを選択する前に、エラーを返すないように条件を記述する方法

Error: missing value where TRUE/FALSE needed

質問

への最初のエラーを変更?

shinyには、アプリ内にエラーメッセージを表示しないように、より一般的なハックはありますか?

私はI`mがここで何かを明らかに不足している感じ...

答えて

0

を使用されているかの値を見たデバッガを使用して、サーバーのコードを簡素化したことを把握するために

問題の原因を特定するが実際の解決方法はreq()またはvalidate()need()関数の組み合わせを使用することです。それらを使用する方法についてはそれぞれのhelp()ページを参照してください。これらの関数の機能は、与えられた引数が指定されているかどうかをチェックすることです。サンプルコードを参照すると、このソリューションは次のようになります。

server <- function(input, output, session){ 
    output$output <- renderUI({ 
    # check if input$input is specified 
    # if not stop executing the rest of this code block 
    req(input$input) 
    div(
     # show name 
     data[which(input$input == data[, "name"]), "name"], br(), 
     data[which(input$input == data[, "name"]), "age"], br(), 
     # if "coward" is not FALSE than show its value 
     if(data[which(input$input == data[, "name"]), "coward"] != FALSE){ 
     data[which(input$input == data[, "name"]), "coward"] 
     } 
    ) 
    }) 
} 
0

作品ハック:

server <- function(input, output, session){ 
    output$output <- renderUI({ 
    div(
     # show name 
     data[which(input$input == data[, "name"]), "name"], br(), 
     data[which(input$input == data[, "name"]), "age"], br(), 
     # if "coward" is not FALSE than show its value 
     if((length(input$input) > 1) && 
     (data[which(input$input == data[, "name"]), "coward"] != FALSE)){ 
     data[which(input$input == data[, "name"]), "coward"] 
     } 
    ) 
    }) 
} 
+0

エラーは表示されず、指定されていても変数「臆病者」は表示されません。 – Siemkowski

1

あなたはR、まず最初に約わからないエラーが出るたびそれを隔離して、エラーの直前で何が起こるかを確認するにはbrowser()を使用してください。これを実行した後、私はエラーが光沢やUIとは無関係であることを知りました。それはfactor(0)FALSEを比較しようとしているからです。

input$inputの値は、最初は""です。つまり、data[which(input$input == data[, "name"]), "coward"]の値は、最初はfactor(0)です。これはif文が壊れているfactor(0) == FALSEの比較をしていることを意味します。私が行うために必要なすべてが

server <- function(input, output, session){ 
    observe({ 
    mydata <- data[which(input$input == data[, "name"]), "coward"] 
    browser() 
    if (mydata == FALSE) { 
     cat("hello") 
    } 
    }) 
} 

そして、私はbrowser()機能を備えた答えは確かに役立ちました

+0

あなたの回答は役に立つと考えています。同僚との議論の後、私はその問題の回避策を見つけることができました。興味があれば私の答えを見てください。 – Siemkowski

+0

あなたの答えを見ていないが、私はあなたが "回避策を見つける"必要はないと思う。これは光沢のある非常に一般的な問題であり、簡単な適切な解決策は、 'req()'関数を単純に使うか、それを扱う前に適切な入力をチェックすることです –

関連する問題