R Shiny renderDataTable не позволяет мне скрывать имена строк - PullRequest
0 голосов
/ 28 мая 2020

Я столкнулся с действительно странной проблемой с R shiny. Моя цель - просто иметь возможность отображать таблицу 5 строк x 2 столбца с настраиваемой шириной столбцов и скрытием имен строк. Это простой код, который у меня есть. Обычно я фиксирую фрейм данных как третий параметр списка.

output$retail_rtg_chg_stats_table <- DT::renderDataTable({

  list_var <- filteredData_retail_rtg_chg()
  df <- list_var[[3]]
  cat("\n\n* Dimension of df with stats -> ",dim(df),": \n")
  print(df)
  row.names(df) <- NULL


  datatable(df, 
            rownames= FALSE,
            options = list(#scrollX = TRUE, 
                           pageLength = 15,
                           autoWidth = T,
                           columnDefs = list(
                                              list(width = '200px', targets =c(1)), 
                                              list(width = '30px', targets =c(2) )
                                            )
                           )
            )     
})

что я пытался заставить его работать? на основе обсуждения Как удалить первый столбец (индекс) из таблицы данных в R Shiny кажется, что мне нужно использовать rownames = T как параметр внутри datatable. Если я это сделаю, мое блестящее приложение полностью зависнет. На экране отображается сообщение «Обработка», и оно остается там навсегда. Затем я прочитал Как мне подавить имена строк при использовании DT :: renderDataTable в R shiny? , но я не мог понять, как это изменит мой код. Затем я прочитал Исключить имена строк из R Shiny renderTable и на основе некоторой информации, которую я добавил туда, я изменил df на

df <- data.frame(df, row.names=NULL)

Результат всегда один и тот же. Сделаю скриншот и прикреплю сюда. Столбец с именами занимает 90% экрана, и я не могу понять почему. Спасибо enter image description here

После дополнительного времени, потраченного на это, я понял, что добавление rownames = False действительно работает, и поскольку фрейм данных имеет 2 столбца, rownames = False приводит к тому, что первый столбец становится становится индексом, следовательно, target = c (2) вызывает ошибку «Обработка ...». Сказав это, я попытался изменить код на:

datatable(df, 
            rownames= FALSE,
            options = list(#scrollX = TRUE, 
                           pageLength = 15,
                           autoWidth = T,
                           columnDefs = list(
                                              list(width = '70px', targets =c(0)), 
                                              list(width = '30px', targets =c(1) )
                                            )
                           )
            )   

, но столбец rownames по-прежнему занимает 95% экрана. Не могу поверить, что они так усложнили настройку ширины столбцов. Это действительно плохо.

...