gpt4 book ai didi

r - 如何在 Shiny 中选择行和列并使用 DT 进行过滤?

转载 作者:行者123 更新时间:2023-12-04 14:56:41 24 4
gpt4 key购买 nike

我正在尝试创建一个 Shiny 的应用程序能够根据用户的选择选择行和列。对于选择列,我使用 pickerInput,对于选择行,我使用扩展名“Select”和代码中可以看到的更多选项(我看到这个 post 效果很好。)

问题是我收到此警告,我认为它与选择类型不兼容。恐怕我没有看到的东西会产生更多错误。

警告:Select 扩展无法在服务器端处理模式下正常工作。建议仅在客户端处理模式下使用 Select 扩展(通过在 DT::renderDT() 中设置 server = FALSE)或使用 DT 自己的选择实现(请参阅 ?DT::datatable 中的 selection 参数。

另一方面,当我选择“行”时,我不知道如何隐藏“pickerInput”中的“选择输入”和操作按钮。

这是代码:

    library(shiny)
library(shinyWidgets)
library(dplyr)

ui <- fluidPage(

# Application title
titlePanel("Old Faithful Geyser Data"),

# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
radioButtons("type_select", "What do you want to select?",
c("Rows" = "Rows",
"Columns" = "Columns")),
uiOutput("picker"),
actionButton("view", "View Selection")

),

# Show a plot of the generated distribution
mainPanel(
h2('Mydata'),
DT::dataTableOutput("table"),
)
)
)

library(shiny)
library(DT)

server <- function(session, input, output) {

data <- reactive({
iris
})

output$picker <- renderUI({
pickerInput(inputId = 'pick',
label = 'Choose',
choices = colnames(data()),
options = list(`actions-box` = TRUE),multiple = T)
})

datasetInput <- eventReactive(input$view,{

datasetInput <- data() %>%
select(input$pick)

return(datasetInput)

})

output$table <- renderDT({
if(input$type_select == "Rows"){
datatable(
data(),
selection = "none",
filter="top",
rownames = FALSE,
extensions = c("Buttons", "Select"),

options = list(
select = TRUE,
dom = 'Blfrtip',
buttons =
list('copy', 'print', list(
extend = 'collection',
buttons = list(
list(extend = 'csv', filename = "File", title = NULL,
exportOptions = list(modifier = list(selected = TRUE))),
list(extend = 'excel', filename = "File", title = NULL,
exportOptions = list(modifier = list(selected = TRUE)))),
text = 'Download'
))
),
class = "display"
)
}else{
datatable(
datasetInput(),
filter="top",
rownames = FALSE,
extensions = 'Buttons',

options = list(
dom = 'Blfrtip',
buttons =
list('copy', 'print', list(
extend = 'collection',
buttons = list(
list(extend = 'csv', filename = "File", title = NULL),
list(extend = 'excel', filename = "File", title = NULL)),
text = 'Download'
))
),
class = "display"
)
}
})
}


# Run the application
shinyApp(ui = ui, server = server)

接下来,我将向您展示该应用的一些屏幕截图,以解释其工作原理。

如果您选择“行”: Rows

如果您选择“列”: columns

事实上,如果你想检查选择是否成功,你可以下载一个文件(例如excel),你会看到你的选择是正确的。

但是,我不知道如何解决我上面解释的问题。

请问有人能帮帮我吗?我很绝望。

非常感谢

最佳答案

要消除警告,请将 renderDT 更改为 DT::renderDataTable 并在其中设置 server = FALSE

这是完整的代码-

ui <- fluidPage(

# Application title
titlePanel("Old Faithful Geyser Data"),

# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
radioButtons("type_select", "What do you want to select?",
c("Rows" = "Rows",
"Columns" = "Columns")),
uiOutput("picker"),
actionButton("view", "View Selection")

),

# Show a plot of the generated distribution
mainPanel(
h2('Mydata'),
DT::dataTableOutput("table"),
)
)
)

library(shiny)
library(DT)

server <- function(session, input, output) {

data <- reactive({
iris
})

output$picker <- renderUI({
pickerInput(inputId = 'pick',
label = 'Choose',
choices = colnames(data()),
options = list(`actions-box` = TRUE),multiple = T)
})

datasetInput <- eventReactive(input$view,{

datasetInput <- data() %>%
select(input$pick)

return(datasetInput)

})

output$table <- DT::renderDataTable(server = FALSE,{
if(input$type_select == "Rows"){
datatable(
data(),
selection = "none",
filter="top",
rownames = FALSE,
extensions = c("Buttons", "Select"),

options = list(
select = TRUE,
dom = 'Blfrtip',
buttons =
list('copy', 'print', list(
extend = 'collection',
buttons = list(
list(extend = 'csv', filename = "File", title = NULL,
exportOptions = list(modifier = list(selected = TRUE))),
list(extend = 'excel', filename = "File", title = NULL,
exportOptions = list(modifier = list(selected = TRUE)))),
text = 'Download'
))
),
class = "display"
)
}else{
datatable(
datasetInput(),
filter="top",
rownames = FALSE,
extensions = 'Buttons',

options = list(
dom = 'Blfrtip',
buttons =
list('copy', 'print', list(
extend = 'collection',
buttons = list(
list(extend = 'csv', filename = "File", title = NULL),
list(extend = 'excel', filename = "File", title = NULL)),
text = 'Download'
))
),
class = "display"
)
}
})
}


# Run the application
shinyApp(ui = ui, server = server)

关于r - 如何在 Shiny 中选择行和列并使用 DT 进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67834645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com