如何在闪亮的数据表中更改过滤器中布尔值的名称?
How to change names inside filter for booleans in datatable in shiny?
我在 Shiny 中有一个数据表,我在其中使用了 filter
选项。当我想过滤一个布尔列时,我可以选择 true
和 false
。我想重命名这些值。因此,它应该显示 yes
和 no
.
,而不是 true
和 false
显示的列条目不是 TRUE
或 FALSE
,而是复选框。这很重要,这就是我将其添加到代码示例中的原因。
我想到了将布尔值转换为因子。然后筛选器显示 yes
和 no
。然而,在这种情况下,所有的复选框都被选中,所以这不起作用。我在下面的代码中注释掉了进行转换的行。如果有没有这个转换步骤的解决方案就好了。
由于我没有找到任何更改值的选项,我想这只能通过 JavaScript 代码来完成。不幸的是,我并不真正熟悉JavaScript。我希望有人打电话来帮助我。
library(shiny)
library(DT)
library(dplyr)
library(forcats)
set.seed(43)
data <- data.frame(A = rnorm(10),
B = letters[1:10],
C = sample(c(TRUE, FALSE), 10, TRUE))
ui <- fluidPage(
DTOutput("table_id")
)
server <- function(input, output, session) {
output$table_id <- renderDT(
data %>%
# mutate(C = as_factor(if_else(C == TRUE, "yes", "no"))) %>%
datatable(filter = "top",
options = list(
columnDefs = list(
list(
targets = c(3),
render = JS(
"function(data, type, row, meta) {",
" if(type === 'display'){",
" return data ? '<input type=\"checkbox\" disabled checked/>' : '<input type=\"checkbox\" disabled/>';",
" }",
" return data;",
"}"
)
))
)
)
)
}
shinyApp(ui, server)
您 data.frame 中的因素 C
将传递“是”或“否”的值;但是,您的 JS 函数正在检查 data
以查看它是 TRUE
还是 FALSE
。如果将 data
与“是”进行比较,则“是”将被视为 TRUE
,而“否”将被视为 FALSE
。让我知道这是否会产生所需的行为。
library(shiny)
library(DT)
set.seed(43)
data <- data.frame(A = rnorm(10),
B = letters[1:10],
C = sample(c(TRUE, FALSE), 10, TRUE))
ui <- fluidPage(
DTOutput("table_id")
)
server <- function(input, output, session) {
output$table_id <- renderDT(
data %>%
mutate(C = as_factor(if_else(C == TRUE, "yes", "no"))) %>%
datatable(filter = "top",
options = list(
columnDefs = list(
list(
targets = c(3),
render = JS(
"function(data, type, row, meta) {",
" if(type === 'display'){",
" return data == \"yes\" ? '<input type=\"checkbox\" disabled checked/>' : '<input type=\"checkbox\" disabled/>';",
" }",
" return data;",
"}"
)
))
)
)
)
}
shinyApp(ui, server)
我在 Shiny 中有一个数据表,我在其中使用了 filter
选项。当我想过滤一个布尔列时,我可以选择 true
和 false
。我想重命名这些值。因此,它应该显示 yes
和 no
.
true
和 false
显示的列条目不是 TRUE
或 FALSE
,而是复选框。这很重要,这就是我将其添加到代码示例中的原因。
我想到了将布尔值转换为因子。然后筛选器显示 yes
和 no
。然而,在这种情况下,所有的复选框都被选中,所以这不起作用。我在下面的代码中注释掉了进行转换的行。如果有没有这个转换步骤的解决方案就好了。
由于我没有找到任何更改值的选项,我想这只能通过 JavaScript 代码来完成。不幸的是,我并不真正熟悉JavaScript。我希望有人打电话来帮助我。
library(shiny)
library(DT)
library(dplyr)
library(forcats)
set.seed(43)
data <- data.frame(A = rnorm(10),
B = letters[1:10],
C = sample(c(TRUE, FALSE), 10, TRUE))
ui <- fluidPage(
DTOutput("table_id")
)
server <- function(input, output, session) {
output$table_id <- renderDT(
data %>%
# mutate(C = as_factor(if_else(C == TRUE, "yes", "no"))) %>%
datatable(filter = "top",
options = list(
columnDefs = list(
list(
targets = c(3),
render = JS(
"function(data, type, row, meta) {",
" if(type === 'display'){",
" return data ? '<input type=\"checkbox\" disabled checked/>' : '<input type=\"checkbox\" disabled/>';",
" }",
" return data;",
"}"
)
))
)
)
)
}
shinyApp(ui, server)
您 data.frame 中的因素 C
将传递“是”或“否”的值;但是,您的 JS 函数正在检查 data
以查看它是 TRUE
还是 FALSE
。如果将 data
与“是”进行比较,则“是”将被视为 TRUE
,而“否”将被视为 FALSE
。让我知道这是否会产生所需的行为。
library(shiny)
library(DT)
set.seed(43)
data <- data.frame(A = rnorm(10),
B = letters[1:10],
C = sample(c(TRUE, FALSE), 10, TRUE))
ui <- fluidPage(
DTOutput("table_id")
)
server <- function(input, output, session) {
output$table_id <- renderDT(
data %>%
mutate(C = as_factor(if_else(C == TRUE, "yes", "no"))) %>%
datatable(filter = "top",
options = list(
columnDefs = list(
list(
targets = c(3),
render = JS(
"function(data, type, row, meta) {",
" if(type === 'display'){",
" return data == \"yes\" ? '<input type=\"checkbox\" disabled checked/>' : '<input type=\"checkbox\" disabled/>';",
" }",
" return data;",
"}"
)
))
)
)
)
}
shinyApp(ui, server)