【发布时间】:2017-04-30 22:01:40
【问题描述】:
我想在 Shiny 应用中显示和编辑 rhandsontable。由于我的数据框相当大,我希望用户能够过滤特定的行,而不是显示整个 1000 行(参见下面的示例)。我可以根据input$row 为子集hot 创建一个反应值,但是只有DF[input$row,] 被分配给input$hot,因此,下次我得到input$hot 的值时,它会返回一个只有一排。
library(shiny)
library(rhandsontable)
ui <- shinyUI(fluidPage(
numericInput("rows","row to filter",value = 1),
rHandsontableOutput("hot")
))
server <- shinyServer(function(input, output, session) {
# render handsontable output
output$hot <- renderRHandsontable({
if (!is.null(input$hot)) {
DF <- hot_to_r(input$hot)
} else {
set.seed(42)
DF <- data.frame(a=1:1000, b= rnorm(1000))
}
rhandsontable(DF)
})
})
runApp(list(ui=ui, server=server))
是否有一个过滤参数可以应用于rhandsontable(),它允许我渲染我的数据框的过滤版本而不实际对其进行子集化,因此链接的input$hot 不会受到影响(除了,当然,对于用户所做的任何编辑)?
我希望用户在文本输入框row 中写入要过滤的行,然后相应地过滤表格。 nrow(hot_to_r(input$hot)) == 1000 必须继续为真:
【问题讨论】:
-
“没有子集的过滤版本”是什么意思?你想渲染什么?
-
@StéphaneLaurent,添加了预期的渲染。我遇到的问题是,如果我选择像
DF[rows,]这样子集 DF(当然是以反应方式),那么子集 DF 将被保存回input$hot并且我会丢失其他 999 行。
标签: javascript r filter shiny rhandsontable