我正在尝试使用单选按钮动态更新数据帧的内容。对于用例,考虑在英语和西班牙语之间更改表中数据的语言。我发现当数据动态更新时,不会构建过滤器。我想出的唯一半途而废的解决方案:
也许有更好的解决方案?我愿意接受建议。下面是数据更改时过滤器功能中断的最小可重现示例。请注意,column_list 中的所有列都会动态更改(附加“X”),并且过滤器在这些列中不再起作用。
library(shiny)
library(DT)
library(htmltools)
d <- iris
ui <- fluidPage(
DTOutput("dtable")
)
server <- function(input, output, session){
d_col_rct <- reactive({
sub_regex = "X$|$"
column_list <- list("Sepal.Length", "Petal.Length", "Species")
for(column in column_list) {
d[[column]] <- sub(sub_regex, "X", d[[column]], perl=TRUE)
if(is.factor(d[[column]])) {
d[[column]] <- droplevels(d[[column]])
}
}
d
})
output[["dtable"]] <- DT::renderDataTable(
{
d_col_rct()
},
filter="top",
rownames=FALSE,
style="bootstrap",
selection=list(
mode="single",
target="column",
selected=0
),
extensions = c("ColReorder"),
options = list(
dom = 'Blfrtip',
autoWidth=FALSE,
orderMulti=TRUE,
searching=TRUE,
search.regex=TRUE,
lengthMenu=list(c(10,25,50,100,100), c('10','25', '50', '100', '1000')),
pageLength=25
)
)
}
shinyApp(ui, server)
列必须是
factor
才能拥有过滤器:
d_col_rct <- reactive({
sub_regex = "X$|$"
column_list <- list("Sepal.Length", "Petal.Length", "Species")
for(column in column_list) {
d[[column]] <- sub(sub_regex, "X", d[[column]], perl=TRUE)
d[[column]] <- as.factor(d[[column]])
}
d
})