Javascript 使用下拉菜单编辑和保存数据表

Javascript 使用下拉菜单编辑和保存数据表,javascript,css,r,shiny,Javascript,Css,R,Shiny,我正在开发一个闪亮的应用程序,它创建了一个datatable,可以在全局范围内编辑并保存为dataframe对象 我面临的问题是:数据帧作为dropdowm菜单选项—名称列。保存数据帧时,输出为as.character输出。示例如下: library(shiny) ui <- fluidPage( DT::dataTableOutput("shinytest") ) server <- function(input, output) { df <-

我正在开发一个闪亮的应用程序,它创建了一个datatable,可以在全局范围内编辑并保存为dataframe对象

我面临的问题是:数据帧作为dropdowm菜单选项—名称列。保存数据帧时,输出为
as.character
输出。示例如下:

library(shiny)
ui <- fluidPage(
DT::dataTableOutput("shinytest")
)

server <- function(input, output) {

  df <- data.frame(Number = NA, 
                   Pages  = NA,
                   Name  = as.character(selectInput(paste0("sel", 1), "", choices = c("x","y"), width = "100px"))
)
  
   rv <- reactiveVal(df)
  
  output$shinytest <- DT::renderDataTable ({
    DT::datatable(rv(), editable = TRUE, escape = FALSE, selection = 'none'
    )
    
  })
  
  observeEvent(input$shinytest_cell_edit, {
    info <- input$shinytest_cell_edit
    newdf <- rv()
    newdf[info$row, info$col] <- info$value
    rv(newdf)
    x <<- rv()
  })
}
shinyApp(ui, server)
库(闪亮)

ui在服务器内部创建了一个数据框,并在名称列中将selectInput作为数据输入,这导致纯html在最终对象(x)中显示为文本。我将selectInput移动到ui,以便为该列选择一个名称,尽管我不知道selectInput是否要选择实际的列名,但这很容易纠正

我添加了一个用于选择行数的输入和一个操作按钮,以避免在再次编辑输入时丢失所有数据

library(shiny)
library(DT)
library(tidyverse)


ui <- fluidPage(
    selectInput(inputId = 'selection1', "", choices = c("x","y"), selected = 'x', width = "100px"),
    numericInput('number_of_rows', 'How many rows?',value = 5),
    actionButton('update', 'Refresh Table'),
    DTOutput("shinytest")
)

server <- function(input, output, session) {
    
    
    
    df <- eventReactive(input$update, {tibble(Number = '', 
                                              Pages  = '',
                                              Name  = as.character(input$selection1),.rows = input$number_of_rows
    )})
    
    rv <- reactive(df())
    
    output$shinytest <- renderDT({
        datatable(rv(), editable = TRUE, escape = FALSE, selection = 'none')
    })
    
    observe({
        newdf <<- df()
    })
    
    observeEvent(input$shinytest_cell_edit, {
        
        info <- input$shinytest_cell_edit
        newdf[info$row, info$col] <<- info$value
        
    })
}

shinyApp(ui, server)
库(闪亮)
图书馆(DT)
图书馆(tidyverse)
用户界面