在Shiny无法更改为handontable添加的列

时间:2019-12-11 21:23:01

标签: r shiny shiny-reactivity rhandsontable

我正在尝试开发一个应用程序,用户可以在其中向表添加列和行,他们可以用来设置规则以对存储在另一个对象中的数据集进行排序。

我构建了一个reprex来隔离问题。单击添加按钮后,UI将成功向表中添加行和列。其他行工作正常。但是,新列中的单元格不能更改。您可以输入文本,但不能切换单元格。我仍在学习Shiny的反应性规则,并且怀疑问题在那里。我尝试采用

dynamically add rows to rhandsontable in shiny and R

,但无济于事。

library(shiny)
library(rhandsontable)
library(tidyverse)

ui <- fluidPage(
        actionButton("addRow",
                     "Add"),
        numericInput("rows",
                     "Number of Rows",
                     value = 0, 
                     min = 0),
        numericInput("colAnd",
                     "Number of And Cols",
                     value = 0, 
                     min = 0),
        numericInput("colBut",
                     "Number of But Cols",
                     value = 0, 
                     min = 0),
        rHandsontableOutput("hot")
)

server <- function(input, output) {

df <- reactive({
        tibble(Topic = "Null",
               And = "Null",
               But = "Null")
    })  

df2 <- eventReactive(input$addRow,{

add_row_custom<- function (df, n, add = "null") 
    {
        new <- data.frame(matrix(add, nrow = n, ncol = ncol(df)))
        colnames(new) <- colnames(df)
        rbind(df, new)
}

final <- hot_to_r(input$hot) 
        final %>% 
            add_row_custom(., input$rows ) %>% 
            cbind(., data.frame(matrix("null", 
                                       nrow = nrow(.), 
                                       ncol = input$colAnd + input$colBut)
                                )
                  )

    })

df4 <- reactive({
        if(input$addRow == 0){
            df()
        }else{
            df2()}
    })

output$hot <- renderRHandsontable(rhandsontable(df4()) %>% 
                                          hot_table(highlightRow = T,
                                                    highlightCol = T))
}

# Run the application 
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

将脑袋撞了好几个小时之后,我走了30分钟,去了可录音的文档。

长话短说,在rhandsontable函数下添加参数useType = F。