1

我正在尝试在 Shiny 应用程序中使用我正在尝试使用rhandsontable但无法编辑条目。事实上,一旦我选择了单元格,我必须使用转义键取消选择它们,并且该op列的下拉菜单丢失了。这是应用程序。

library(rhandsontable)
library(shiny)

ui = fluidPage(rHandsontableOutput("equation"))

server = function(input, output){
  values = reactiveValues(equation = 
    data.frame(A = "A value", op = ">", B = "B value"))

  observe({
    if(!is.null(input$equation))
      values$equation = hot_to_r(input$equation)
  })

  output$equation = renderRHandsontable({
    rhandsontable(values$equation) %>%
      hot_col(col = "op", source = c(">", "<"))
  })
}

shinyApp(ui = ui, server = server)

其他注意事项:

  1. 最后,我还想以交互方式添加和删除行。
  2. 我正在使用这个表来构建一个方程,所以请随意忽略这个表的东西,告诉我一个很酷的方程构建器 HTML 小部件。
4

1 回答 1

1

不完全清楚您在这里尝试做什么,但我认为这解决了几个问题。

  • 您需要在创建该因子变量时声明您的级别op,并且通常您必须非常明确地了解您的数据框中列的类型rhandsontablereactiveValues出于这个原因,在调用之外构造它是有意义的,这样您就可以事先检查它。
  • 因子下拉列表永远不会低于网格,因此您必须有足够的空间来显示因子下拉列表。我插入了几行并选择了下拉列表来说明这一点。

这是调整后的代码:

library(rhandsontable)
library(shiny)

ui = fluidPage(rHandsontableOutput("equation"))

server = function(input,output) {

  eqdf = data.frame(A_value = as.numeric(0),op = factor(c(">"),levels=c(">","<")),B_value = as.numeric(0))
  print(eqdf)
  values = reactiveValues(equation=eqdf)

  observe({
     req(input$equation)
     values$equation = hot_to_r(input$equation)
  })

  output$equation = renderRHandsontable({
    rhandsontable(values$equation) 
  })
}
shinyApp(ui = ui,server = server)

这是我通过右键单击添加两行后下拉列表的样子:

在此处输入图像描述

于 2017-01-13T13:47:35.207 回答