Как я могу ввести новую строку в столбце, используя DTedit и transparent :: uiOutput? - PullRequest
2 голосов
/ 14 июня 2019

Я использую DTedit pckg для отображения кадра данных (mydata) в блестящем приложении, так как этот простой R pckg позволяет мне добавлять / редактировать строки очень простым способом.Все идет нормально.ОДНАКО, я хотел бы ввести новую строку (или разрыв строки) в столбце Var2, отделяя ПЕРВУЮ от ВТОРОЙ строки и ТРЕТЬЮ от ЧЕТВЕРТОЙ строки.

Мне удалось сделать это с помощью DT :: dataTableOutput (вариант 1 ниже).Тем не менее, DTedit, кажется, работает только с глянцевым :: uiOutput, и я не смог представить новую строку там (вариант 2).Я читал о div (), но сейчас я абсолютно не в курсе.

Может кто-нибудь пролить свет на то, как я могу ввести новую строку в столбце информационного кадра, используя Dtedit, поэтому блестящий ::uiOutput?

NB: Я пришел к выводу, что проблема проблема заключается в Блестящем :: uiOutput, потому что это единственное «очевидное» различие, которое я вижу между двумя вариантами.Но это только я, может быть что-то менее очевидное, что я пропускаю.

PD: это мой первый пост, поэтому, пожалуйста, расскажите мне, если что-то можно сделать лучше.Спасибо!

# OPTION 1: using DT (DT::dataTableOutput) (WORKING)

    ui = fluidPage(
      h3("New line works when using DT (DT::dataTableOutput)",
      mainPanel(
        DT::dataTableOutput("mytable")
        )
      )
    )

    server = function(input, output){

      #dataframe
      mydata <- data.frame(Var1 = c("a", "b"),
                           Var2 = c("FIRST LINE: first; SECOND LINE: second", 
                                    "THIRD LINE: third; FOUR LINE: four"))

      #Subtitute semicolon by break line based on 
      #https://stackoverflow.com/questions/26368192/how-to-insert-new-line-in-r-shiny-string
      mydata$Var2 <- gsub(pattern = "; ", replacement = "<br/>", mydata$Var2)

      #render table
      output$mytable = DT::renderDataTable(escape = F,
            mydata
        )
    }

shinyApp(ui = ui, server = server, options = list(height = 1080))

# OPTION 2: using DTedit, therefore shiny::uiOutput, (not working)

    ui = fluidPage(
      h3("New line does not work when using DTedit-shiny::uiOutput"),
      mainPanel(
        shiny::uiOutput("mytable")
      )
    )

    server = function(input, output){

      #dataframe
      mydata <- data.frame(Var1 = c("a", "b"),
                           Var2 = c("FIRST LINE: first; SECOND LINE: second", 
                                    "THIRD LINE: third; FOUR LINE: four"))

      #Subtitute semicolon by break line based on 
      #https://stackoverflow.com/questions/26368192/how-to-insert-new-line-in-r-shiny-string
      mydata$Var2 <- gsub(pattern = "; ", replacement = "<br/>", mydata$Var2)

      #render table
      output$mytable = DT::renderDataTable(escape = F,
                                           DTedit::dtedit(input, output,
                                                          name = 'mytable',
                                                          thedata = mydata)
      )

    }

shinyApp(ui = ui, server = server, options = list(height = 1080))

Требуемый результат:

Требуемый результат

Фактический результат на данный момент:

Фактическийрезультат

1 Ответ

1 голос
/ 14 июня 2019

Это работает путем замены в JavaScript в функции render:

server = function(input, output){

  #dataframe
  mydata <- data.frame(Var1 = c("a", "b"),
                       Var2 = c("FIRST LINE: first; SECOND LINE: second", 
                                "THIRD LINE: third; FOUR LINE: four"))

  #render table
  DTedit::dtedit(
    input, output,
    name = 'mytable',
    thedata = mydata, 
    datatable.options = list(
      columnDefs = list(
        list(targets=1, 
             render = JS("function(data){return data.replace(/;/g, '<br>');}"))
      )))

}

enter image description here

...