如何在 DTEdit 中呈现 selectInput 的选项?

问题描述 投票:0回答:0

我正在开发一个 RShiny 应用程序,使用 DTedit 包创建可编辑的数据表。目标是允许用户映射两个不同数据框中的列。但是,在 DTedit 表中使用 selectInput 时,选择输入显示空白选项。我已经验证数据和列名称是正确的。谁能帮我诊断问题并获取选择输入以显示预期的选择?

library(shiny)
library(bslib)
library(DT)
library(DTedit)

MAPPING_TABLE <- list(
  'Standard Column 1' = list('Type'='Character'),
  'Standard Column 2' = list('Type'='Character'),
  'Standard Column 3' = list('Type'='Character')
)

format_default_mapping_table <- function(fields_list) {
  data.frame(
    'Standard Field' = names(fields_list),
    'Type' = unname(unlist(lapply(fields_list, function(field) field$Type))),
    'PY Field' = c(''),
    'CY Field' = c(''),
    check.names=FALSE
  )
}


ui <- navbarPage(
  
  title = 'Mapping Tool',
  theme = bs_theme(version=5, bootswatch='cosmo'),
  position = 'static-top',
  fluid = TRUE,
  
  tabPanel(
    'Home',
    fluidPage(
      fluidRow(
        column(width=4, uiOutput('mapping_table_explanation'), uiOutput('mapping_table_button')),
        column(width=8, uiOutput('Mapping_Table'))
      )
    )
  )
)

server <- function(input, output, session) {
  
  data_dir <- reactiveValues(
    data=list(
      'PY Data'=data.frame('col1a'=1:10, 'col2a'=11:20, 'col3a'=21:30),
      'CY Data'=data.frame('col1b'=1:10, 'col2b'=11:20, 'col3b'=21:30)
    )
  )
    
  output$mapping_table_explanation <- renderUI({
    fluidRow(
      h3(tags$b('3. Field Mapping')),
      p(
        paste(rep('Explanation goes here.', 20), collapse=' '),
        style = 'display: inline; text-align: justify;'
      )
    )
  })
  
  output$mapping_table_button <- renderUI({actionButton('confirm_mapping', 'Confirm Mapping?', width='100%')})
  
  Mapping_Table_Results <- dtedit(
    input, output,
    name = 'Mapping_Table',
    thedata = format_default_mapping_table(MAPPING_TABLE),
    edit.cols = c('PY Field', 'CY Field'),
    show.copy = FALSE,
    input.types = list(
      'PY Field' = 'selectInput',
      'CY Field' = 'selectInput'
    ),
    input.choices = list(
      'PY Field' = names(data_dir$data[['PY Data']]),
      'CY Field' = names(data_dir$data[['CY Data']])
    )
  )
  
}


shinyApp(ui, server)

shiny dt selectinput
© www.soinside.com 2019 - 2024. All rights reserved.