RShiny- DT :: renderDataTable работает локально на консоли сервера (без журналов ошибок), но отключается, когда кто-то использует ссылку - PullRequest
1 голос
/ 06 августа 2020

У меня возникают проблемы с DT :: renderDataTable с реактивной функцией (которую я использую для выбора столбцов перетаскивания для фильтрации выбранных столбцов для отображения в пользовательском интерфейсе). Он работает локально на консоли, но отключается, когда я работаю на RServer по ссылке. Он ломается, когда пытается заполнить фрейм данных в пользовательском интерфейсе. Все версии пакетов одинаковы, я использую R 3.6.1. При локальной работе в консоли нет журналов ошибок.

Несколько дней назад это работало нормально, но не работает сейчас.

Ниже приведен фрагмент кода.

library(dplyr)
library(shiny)
library(shinyBS)
library(sortable)
library(shinyWidgets)
library(tidyr)
library(tidyverse)
library(tidyselect)
                    
rv <- reactiveValues(data = NULL)  

      bsModal(id = "modalExample",title =  'Select Features and Re-Arrange ', 
      trigger =  "tabBut", size = "large",

      radioButtons('radio', 'Select Action', choices = 
                      list('Default' = 'Default', 'Custom' = 'Custom'),
                      selected = 'Default', inline = T),
      bucket_list(
        header = "Select Features and Re-Arrange", group_name = "bucket_list_group",
            add_rank_list(
              text = "Drag from here",
              labels =
                c("Code","To", "Name", "From","Desc","Distance"),input_id = "rank_list_1"
            ),
            add_rank_list(
              text = "To here", labels = NULL,
              input_id = "rank_list_2"),orientation = 'horizontal')
        )

main_df <- reactive({
  selected_action = input$radio

  if(selected_action == 'Custom' ){
    result <- rv$df %>%
              select(all_of(input$rank_list_2))
  }
  else{result <- rv$df}
  return(as.data.frame(result))
})

output$content <- DT::renderDataTable({
  if(is.null(main_df())) return()      
  DT::datatable(main_df(),
    selection = 'none', filter = 'top', editable = FALSE, options = list(autoWidth = TRUE)) 
})      

1 Ответ

0 голосов
/ 06 августа 2020

Попробуйте это

main_df <- reactive({
    req(input$radio,input$rank_list_2)
    if(is.null(input$radio) | is.null(input$rank_list_2)) {return(NULL)}
       
    selected_action = input$radio
    
    if(selected_action == 'Custom' ){
      result <- rv$df %>%
        select(all_of(input$rank_list_2))
    }
    else{result <- rv$df}
    return(as.data.frame(result))
  })

output$content <- DT::renderDataTable({
  DT::datatable(main_df(),
                selection = 'none', filter = 'top', editable = FALSE, options = list(autoWidth = TRUE)) 
}) 

 
...