1

デフォルトの rhandsontable テーブルを使用して shinny アプリを作成しようとしていますが、ユーザーにはそれを更新するための 2 つのオプションがあります。

  1. rhandsontable テーブルで直接手で記入するか、
  2. 数値入力とactionButton

ここに私のコード:

library(shiny)
library(rhandsontable)
library(data.table)

data_pop <- data.table(`Number` = c(1, 1, 2, 2, 3, 3), 
                       `Country` = c("Andorra", "Angola", "Anguilla", "Antigua and Barbuda", "Argentina", "Armenia"),
                       `Population` = c(123, 456 , 789, 246 , 369 , 159))

ui <- navbarPage(title = tags$b(tags$span("APP")), id = "nav", fluid = TRUE,
                 
                 tabPanel(tags$b(tags$span("Model")), 
                          sidebarLayout(
                            sidebarPanel( 
                              numericInput("number", label = "Number", value = 0, min = 0, max = Inf),
                              actionButton("load", "Load", align = 'right'),
                            ),
                            mainPanel(
                              rHandsontableOutput("out_table"), 
                            )
                          )
                 )
)

server <- function(input, output) {
  
  default <- data.table(`Country` = "", 
                        `Column` = as.integer(0), 
                        stringsAsFactors = FALSE)

  values <- reactiveValues()

  observe({
    
    if (!is.null(input$table)) {
      table <- hot_to_r(input$out_table_country)
    } else {
      if (is.null(values[["table"]])) {
        
        default <- eventReactive(input$load, {
          data_pop[`Number` == input$number, .(`Country`, `Population`)]
        })
        table <- default
      }
      else {
        table <- values[["table"]]
      }
    }
    values[["table"]] <- table
  })
  
  output$out_table <- renderRHandsontable({
    table <- values[["table"]]
    if (!is.null(table))
      rhandsontable(table, stretchH = "all") %>%
      hot_col(col = "Country", type = "autocomplete", source = data_pop$Country, strict = T) %>%
      hot_col(col = "Column", format = "0,0") 
  })
}

shinyApp(ui = ui, server = server)

defaultテーブルをリアクティブなものに置き換えようとすると、問題が発生します。

Error in as.vector: cannot coerce type 'closure' to vector of type 'list'

列の形式に関連しているかどうかはわかりませんhot_col...多くの解決策を試しましたが、まだ何も機能しません。助けていただければ幸いです!

どうもありがとう、

ファビアン

4

0 に答える 0