【问题标题】:How can I introduce a new line within a column using DTedit and shiny::uiOutput?如何使用 DTedit 和 shiny::uiOutput 在列中引入新行?
【发布时间】:2019-10-28 15:23:58
【问题描述】:

我正在使用 DTedit pckg 在闪亮的应用程序中显示数据框 (mydata),因为这个简单的 R pckg 允许我以非常简单的方式添加/编辑行。到目前为止,一切都很好。但是,我想在 Var2 列中引入一个新行(或换行符),将第一行与第二行分开,第三行与第四行分开。

我已经能够使用 DT::dataTableOutput(下面的选项 1)来做到这一点。但是,DTedit 似乎只适用于 shiny::uiOutput,我无法在那里引入新行(选项 2)。我已经阅读了有关 div() 的内容,但我现在完全一无所知。

有人可以解释一下我如何使用 Dtedit 在数据框的列中引入新行,因此是 shiny::uiOutput?

注意:我已经得出结论,shiny::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))

想要的结果:

Wanted outcome

到目前为止的实际结果:

Actual outcome

【问题讨论】:

  • 欢迎来到 SO!您是否尝试过包装,例如mydata$Var2HTML()?顺便提一句。您还可以在问题中显示您的图片。
  • 感谢您的建议@BigDataScientist!下次会做。我确实尝试将它包装在 html 中,但它对我不起作用,可能我做错了。无论如何,@Stéphane Laurent 下面提供的解决方案有效,所以这就是我正在实施的。

标签: html shiny newline


【解决方案1】:

这可以通过在 render 函数中的 JavaScript 中进行替换来实现:

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>');}"))
      )))

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 2020-11-21
    • 2020-09-29
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    相关资源
    最近更新 更多