如何在R Shiny App的destination可排序rank_list中设置默认值
实现Shiny中sortable rank_list初始填充指定值
场景1:支持重复拖拽(source始终保留所有选项)
直接修改UI中destination的初始标签,并完善server端的空值处理逻辑,即可实现启动时destination默认填充"b",同时保留重复拖拽的功能:
library(shiny) library(sortable) ui <- fluidPage( fluidRow( column( width = 6, uiOutput("main_rank") ), column( width =6, rank_list( text = "Destination", labels = c("b"), # 初始填充"b"值 input_id = "other_rank", options = sortable_options(group = "my_shared_group") ) ) ) ) server <- function(input,output) { # 响应式生成source的选项列表 rankvars = reactive({ fixedItems = c("a", "b", "c", "d") # 处理input初始为空的情况,确保初始used值为"b" used = unique(input$other_rank %||% "b") # 保留所有固定选项,支持重复拖拽 unique(c(setdiff(fixedItems, used), used)) }) output$main_rank = renderUI({ fluidRow( rank_list( text = "Source", labels = rankvars(), input_id = "main_list", options = sortable_options(group = "my_shared_group") ) ) }) } shinyApp(ui, server)
说明
- 通过UI中
rank_list的labels参数直接设置初始值,启动后destination自动显示"b"。 - 用
%||%(Shiny内置空值处理运算符)确保input未初始化时,used变量能取到初始的"b",避免计算错误。 - 原有逻辑保留了所有固定选项在source中,可重复将同一选项拖拽到destination。
场景2:source仅显示未拖拽到destination的选项
如果希望source初始时不包含已在destination的"b",且拖拽后source自动移除对应选项,修改rankvars()的返回逻辑即可:
library(shiny) library(sortable) ui <- fluidPage( fluidRow( column( width = 6, uiOutput("main_rank") ), column( width =6, rank_list( text = "Destination", labels = c("b"), # 初始填充"b"值 input_id = "other_rank", options = sortable_options(group = "my_shared_group") ) ) ) ) server <- function(input,output) { # 响应式生成source的选项列表 rankvars = reactive({ fixedItems = c("a", "b", "c", "d") # 处理input初始为空的情况,确保初始used值为"b" used = unique(input$other_rank %||% "b") # 仅保留未被拖拽到destination的选项 setdiff(fixedItems, used) }) output$main_rank = renderUI({ fluidRow( rank_list( text = "Source", labels = rankvars(), input_id = "main_list", options = sortable_options(group = "my_shared_group") ) ) }) } shinyApp(ui, server)
说明
- 将
rankvars()的返回值改为setdiff(fixedItems, used),source只会显示尚未拖拽到destination的选项。 - 启动时source显示
c("a","c","d"),destination显示"b";拖拽"a"到destination后,source会自动更新为c("c","d")。
内容的提问来源于stack exchange,提问作者mazu
相关产品推荐
相关产品推荐

