5

R の ShinySky パッケージを使用して、Shiny に Typeahead ボックスを作成しようとしています。

Typeahead の事前入力に使用されるデータが関数にハードコードされている exampleを拡張しようとしています。textInput.typeahead

textInput.typeahead(
        id="thti"
        ,placeholder="type 'name' or '2'"
        ,local=data.frame(name=c("name1","name2"),info=c("info1","info2")) #<- LOOK!
        ,valueKey = "name"
        ,tokens=c(1,2)
        ,template = HTML("<p class='repo-language'>{{info}}</p> <p class='repo-name'>{{name}}</p> <p class='repo-description'>You need to learn more CSS to customize this further</p>")
      )

例がここで行ったように、関数の途中で定義されたローカルデータフレームを持つことは、私がやりたいことではありません:

,local=data.frame(name=c("name1","name2"),info=c("info1","info2")) 

localShiny の他の場所で作成されたリアクティブ オブジェクトである という引数を提供したいと思います。

これまでのところ、私はそうすることができませんでした。

反応性を使用して Lookhead オプションを動的に入力しようとする私の戦略は次のとおりです。

1) ユーザーがスライダーを使用してデータフレームをサブセット化できるようにします。
2) 次のようなものを使用して、サブセット化されたデータフレームを読み込むように先読みを設定します,local=subset(DF)
。3) 先読みが想定どおりに機能することを願っています。

シンプルに見えますか?これはスクリーンショットです。111 のユーザー入力の下にルックヘッドが表示されないことがはっきりとわかります。以下は私のコードです。どんな助けでも大歓迎です。

ここに画像の説明を入力

library(shiny)
library(shinysky)
options(shiny.trace = F)  # change to T for trace

DF <- data.frame(ID=c("111", "222", "333", "444"), info=c("info1", "info2", "info3", "info4"))

runApp(list(ui = pageWithSidebar(
  headerPanel("This is a test"),
  sidebarPanel(
    helpText("I couldn't live without StackOverflow"),

    sliderInput("range",
                label = "Pick how many rows you want in your dataframe:",
                min = 2, max = 4, value = 2, step=1),

    helpText("After subsetting the dataframe using the controls above, can we make the Lookahead work?"),

    textInput.typeahead(
      id="thti"
      ,placeholder="type ID and info"
      ,local=subset(DF)
      ,valueKey = "ID"
      ,tokens=c(1,2)
      ,template = HTML("<p class='repo-language'>{{info}}</p> <p class='repo-name'>{{ID}}</p> <p class='repo-description'></p>"))

  ),
  mainPanel(textOutput("text1"),
            htmlOutput("text"),
            tableOutput('table')
  )
),
server = function(input, output, session) {

  subsetDF <- reactive({ DF <- DF[1:input$range, ]
                         DF
                         })

  output$text <- renderUI({
    str <- paste("This is how many rows you've chosen for your dataframe:",
                 input$range)
    HTML(paste(str, sep = '<br/>'))
                          })

  output$table <- renderTable(subsetDF())

}
)
)
4

0 に答える 0