2016-12-21 8 views
2

私はテキストマイニングに取り組んでいます。ユーザーの入力に基づいて、私は次の単語のための多くの提案を生成しています。この部分はうまく動作します。しかし、提案の数は非常に多い可能性がありますので、私はShinyの10個の提案を表示したいですし、NAの値を表示したくありません。入力に依存する光沢のあるアプリケーションの出力を出力できません

私は同じ問題を呈する再現可能な例を作成しました。私が使用しようとしているトリックはiと "提案"を貼り付けることです。これは、私の出力が自分の入力に依存しないときに機能します。私はhttp://shiny.rstudio.com/gallery/creating-a-ui-from-a-loop.htmlからこれを得た。

あなたはUIのテキストフィールドに正の整数を入力するとアプリができるだけ多くの単語を表示することになっている

library(shiny) 

    mySuggestions <- c("this", "is", "a", "test", "of", "getting", "reactive", "list", "length") 

    function(input, output, session) { 

      getWords <- function(i, wrds) { 
        output[[paste0("suggestions", i)]] <- renderText({ wrds()[i] }) 
      } 

      userText <- reactive({ 
        # Leaves this function when input$userText is NULL or "" 
        req(input$userText) 
        input$userText }) 

      words <- reactive({ 
        mySuggestions[1:userText()] 
      }) 
      # Problem 
      lapply(reactive({ 1:min(5, length(words())) }), getWords(), wrds=words()) 
    } 

マイui.Rファイル

library(shiny) 

    fluidPage(
      titlePanel("Test"), 
      fluidRow(
        textAreaInput("userText", label="Enter your text") 
      ), 
      fluidRow(
        lapply(1:5, function(i) { 
          textOutput(paste0("suggestions", i))}) 
      ) 
    ) 

マイserver.Rが、5せいぜい。

上記のバージョンのserver.Rは、 "警告:paste0:引数" i "のエラーがありません。既定値はありません" この問題のある行に対していくつかのバージョンを試しました。

reactive({ lapply(1:min(5, length(words())), getWords(), wrds=words()) }) 

出力は何も表示されませんが、エラーは発生しません。警告で

lapply(1:min(5, length(words())), getWords() , wrds=words()) 

結果、「警告:paste0でのエラー:引数 『私の警告「:paste0でエラーが発生しました引数警告」で、私は』いいえ、デフォルトで、不足している」

lapply(reactive({1:min(5, length(words()))}), getWords(), wrds=words()) 

結果 はタイプ「リスト」のベクトルにタイプ「閉鎖」を強制することはできません

:as.vectorでのエラーで

 lapply(reactive({1:min(5, length(words))}), function(i) { 
       output[[paste0("suggestions", i)]] <- renderText({ words[i] }) }) 

結果(X、「リスト」)「既定値はありませんで、不足しています」 as.vectorでのエラーでの

 lapply(reactive({1:min(5, length(words()))}), function(i) { 
       output[[paste0("suggestions", i)]] <- renderText({ words()[i] }) }) 

結果(xは、 "リスト"): は型 'list' の

 reactive({lapply(1:min(5, length(words)), function(i) { 
       output[[paste0("suggestions", i)]] <- renderText({ words[i] }) }) }) 

のベクトルにタイプ '閉鎖' を強制することはできませんがエラーを与えないが、それは何も示していません出力に表示されます。

 reactive({lapply(1:min(5, length(words())), function(i) { 
       output[[paste0("suggestions", i)]] <- renderText({ words()[i] }) }) }) 

エラーは発生しませんが、出力に何も表示されません。

 lapply(1:min(5, reactive({ length(words)})), function(i) { 
      output[[paste0("suggestions", i)]] <- renderText({ words[i] }) }) 

分でエラーになる(5、反応({:引数の無効な 'type'(閉鎖)分でのエラーで

 lapply(1:min(5, reactive({ length(words())})), function(i) { 
      output[[paste0("suggestions", i)]] <- renderText({ words()[i] }) }) 

結果(5、反応({:無効「タイプ引数の終わり(終わり)

次の行は、入力された単語の数を1つのテキストフィールドに表示します.2を入力すると2単語、20を入力すると5単語が表示されます。しかし、私はそれぞれの単語を別のテキストフィールドに入れたい。

output$suggestions1 <- renderText(words()[1:min(5, length(words()))]) 

私は迷子になりました。私は私が働くことを期待していないいくつかのことを試してみたいと絶望的になっていました。 私は何をしたいのですか?もしそうなら、どうですか?そうでない場合は、何が問題なのですか?私はまだこの特定の問題に対処しているものは見つかりませんでした。

+0

楽しいですが、私は今それに取り組む時間がありません。おそらく今晩後で。 –

+1

貼り付けなしで簡単にコーディングしてから整理してください。また、光沢のあるチートシート#3を見てください。実行モデルを使用して、シャイニー実行の精神モデルが正しいことを確認します。私はそれがそうでないかもしれないと思う。 –

+0

@MikeWise。私はforループでも試しました。どちらもうまくいきませんでした。私は、 'render'ステートメントと' reactive'ステートメントの範囲を混在させなければならないと思います。私はこれらのスコープを必要とする前にそれを試した方法と思うし、それはおそらく許されない。 'observe'を使うと動作します。どうやらそれはどうやら混在しているようだ。 –

答えて

1

outputUIとrenderUIの組み合わせがうまく機能し、コードが比較的単純になります。

ui.R

... 
    fluidRow(
      uiOutput("suggestions") 
    ) 

server.R

library(shiny) 

    mySuggestions <- c("this", "is", "a", "test", "of", "getting", "reactive", "list", "length") 

    function(input, output, session) { 

      ... 

      output$suggestions <- renderUI({ 
        lapply(1:min(5, length(words())), function(i) { 
        output[[paste0("suggestions", i)]] <- renderText({ words()[i] }) 
      }) }) 
    } 

私はoutputUIとrenderUIが何をしたか知りませんでしたが、彼らはこのような状況のための完璧なようです。

+1

しかし、userTextの値を数回上下に変更するとうまくいくのでしょうか?望ましくない定義がぶつかることはないと確信していません。 –

+2

また、ShinyのメインアーキテクトのShinyデザインパターンに関する素晴らしい講義もあります。https://www.rstudio.com/resources/webinars/shiny-developer-conference/ –

+0

@MikeWiseあなたが正しい。立ち上げるのは問題ありませんが、小さい番号を入力するともう動作しません。ふりだしに戻る :( –

関連する問題