【问题标题】:rhandsontable hide columns for a shiny apprhandsontable 为闪亮的应用程序隐藏列
【发布时间】:2017-02-21 11:29:21
【问题描述】:

我用

输出$hot

得到一张桌子。

一切正常,但我希望允许用户仅选择某些列(使用 shiny::updateSelectizeInput() 实现)。然后应在完整数据表中更新数据,而不仅仅是在所选列中更新。我用谷歌搜索,但只能在 java 中找到一个非常糟糕的描述。有人可以帮我解决这个问题吗?

根据要求举例:

 DF = data.frame(matrix(rnorm(20), nrow=10)) 
 rhandsontable(DF)

【问题讨论】:

  • 请用一个简单的例子说明一下。
  • 这里是一个例子: DF = data.frame(matrix(rnorm(20), nrow=10)) rhandsontable(DF) 我只想显示 X2 但能够更新整个表。即我不想在更新 data.frame 后合并 X2。
  • Silentdevildoll 提供了一个优雅的解决方案。尽管如此,我还是不明白为什么您不想使用简单的cbind() 来更新整个表格,这并不费时。即使在您的 rhandsontable 中使用 order = T(仅订购客户端),原始订单也将使用 hot_to_r() 返回,因此不需要 merge(),这可能很耗时。

标签: r dataframe shiny show-hide rhandsontable


【解决方案1】:

这已经晚了几年,我会注意到我认为这不会完全解决问题,因为它没有按照 OP 的要求使用“updateSelectizeinput()”,而且我不能处理正确选择输入,因为一列始终显示,但对于任何寻找开始的人来说,这里有一个例子:

library(shiny)
library(rhandsontable)

ui <- fluidPage(
  selectInput("Select", "Select", names(mtcars), multiple = T, selected = names(mtcars)),
  rHandsontableOutput("cars")
)

server <- function(input, output, session) {
  DF<-reactiveValues(DF = mtcars, Select = NULL)
  observeEvent(input$Select,{
    DF$Select <- input$Select
  })
  output$cars<-renderRHandsontable({
    rhandsontable(DF$DF, rowHeaders = NULL)%>%
      hot_cols(colWidths = ifelse(names(DF$DF) %in% DF$Select == T, 150, 0.1))
  }) 
}

shinyApp(ui, server)

它使用 0.1 作为列宽来有效地隐藏列,保留原始数据框。

【讨论】:

  • rhandsontable 每次用户修改其选择时都会重新渲染,因此为什么不简单地在renderRHandsontable 中使用select 语句?当用户更改选择时保留表格版本(即不重新渲染表格,只需修改表格显示)会很棒。
猜你喜欢
  • 2015-09-08
  • 2021-05-18
  • 1970-01-01
  • 2020-07-27
  • 2019-01-29
  • 2019-04-15
  • 2015-08-17
  • 1970-01-01
  • 2018-06-14
相关资源
最近更新 更多