簡體   English   中英

R shiny,可編輯 DT 表模塊,以反應數據作為輸入

[英]R shiny, Editable DT table Module with reactive data as input

我正在嘗試創建一個可編輯的 shiny DT 表模塊。 當我傳入虹膜數據時效果很好。 但是,當我嘗試傳遞反應值時,模塊不起作用。 以前有沒有人有過類似的經歷? 你能分享你的想法嗎?

library(shiny)
library(DT)

editableUI<-function(id){
  ns <- NS(id)
  DT::dataTableOutput(ns("mod_table"))
}

editableUIServer<-function(id,data,disable_col,change){
  moduleServer(id,
               function(input,output,session){
                 print('hi')
                 v<-reactiveValues(data = data)
                 print('here we got v')
                 print(v$data)

                 output$mod_table <- renderDT(v$data,
                                             editable = list(target = 'cell',
                                                             disable = list(columns=c(disable_col))))
                 proxy = dataTableProxy('mod_table')
                 observeEvent(input$mod_table_cell_edit, {
                  info = input$mod_table_cell_edit
                  v$data <<- editData(v$data, info)
                  replaceData(proxy, v$data, resetPaging = FALSE)
                })
                 observeEvent(change(),{
                   v$data<<-data
                 })
                 
    return(v)
}
)}

# Define UI for application that draws a histogram
ui <- fluidPage(
      fluidPage(
        fluidRow(pickerInput('spec',label = 'Species',choices = unique(as.character(iris$Species)),selected = "versicolor")
                 ),
        fluidRow(editableUI("test")))

)

# Define server logic required to draw a histogram
server <- function(input, output) {
  data<-reactive({
    iris %>% filter(Species %in% c(input$spec))
    })
  observe({print(data())})
  
  v<-reactive({editableUIServer("test",data(),c(1), change_ppg = reactive(input$spec))})
}

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

我改變了幾行,現在它可以工作了。 雖然不知道為什么它首先是錯誤的


library(shiny)
library(DT)



editableUI<-function(id){
  ns <- NS(id)
  DT::dataTableOutput(ns("mod_table"))
}

editableUIServer<-function(id,data,disable_col){
  moduleServer(id,
               function(input,output,session){
                 print('hi')
                 v<-reactiveValues(data = data)
                 print('here we got v')
                

                 output$mod_table <- renderDT(v$data,
                                             editable = list(target = 'cell',
                                                             disable = list(columns=c(disable_col))))
                 proxy = dataTableProxy('mod_table')
                 observeEvent(input$mod_table_cell_edit, {
                  info = input$mod_table_cell_edit
                  v$data <<- editData(v$data, info)
                  replaceData(proxy, v$data, resetPaging = FALSE)
                })
             
                 
    return(v)
}
)}

# Define UI for application that draws a histogram
ui <- fluidPage(
      fluidPage(
        fluidRow(pickerInput('spec',label = 'Species',choices = unique(as.character(iris$Species)),selected = "versicolor")
                 ),
        fluidRow(editableUI("test")))

)

# Define server logic required to draw a histogram
server <- function(input, output) {
  data<-reactive({
    iris %>% filter(Species %in% c(input$spec))
    })

 # v<-reactive({editableUIServer("test",data =iris,c(1), change_ppg = reactive(input$spec))})
  v<- reactive(editableUIServer("test",data(),c(1)))
  observe(print(v()$data))
}

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


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM