R Shiny表格无法渲染HTML

13
我正在使用renderTable创建一个表格,但是表格内的HTML没有渲染出来:
这是相关的代码片段:
if (is.null(Compare_Count) || is.na(Compare_Count) || length(Compare_Count) == 0L ) {
          CT_Table[i, 3] <- HTML("<i class='icon-arrow-up'></i>")
        } else if (CT_Table[i, 2] > Compare_Count) {
          CT_Table[i, 3] <- print(tags$i(class='icon-arrow-up', style="text-color: green"), quote = FALSE)
}

无论是 HTMLpaste 还是 c 都不起作用。

我该如何显示箭头?

谢谢!


server.r: [注意,这只是一个示例。代码不完整,括号可能不匹配等。这些都与问题无关。]

output$example <- renderTable(include.rownames=FALSE,{
 CT_Table <- count(Canidates,vars=c("Name"))
 CT_Table <- CT_Table[order(CT_Table["Recent Reviews: "], decreasing=T),]
    for (i in 1:nrow(CT_Table)) {
      Compare_Name <- paste(CT_Table$Product[i])
      Compare_Count <- Can_trend[Can_trend$Name == Compare_Name, 2]
        if (is.null(Compare_Count) || is.na(Compare_Count) || length(Compare_Count) == 0L ) 
{
          CT_Table[i, 3] <- HTML("<i class='icon-arrow-up'></i>")
        } else if (CT_Table[i, 2] > Compare_Count) {
          CT_Table[i, 3] <- tags$i(class='icon-arrow-up', style="text-color: green")
        } else if (CT_Table[i, 2] < Compare_Count) {
          CT_Table[i, 3] <- tags$i(class='icon-arrow-down', style="text-color: red")
        } else if (CT_Table[i, 2] == Compare_Count) {
          CT_Table[i, 3] <- tags$i(class='icon-minus', style="text-color: yellow")
        }
     }
  }
 CT_Table
})

ui.r 只是对 tableOutputhtmlOutput 的简单调用,但两者都不能渲染粘贴到列中的 HTML。


你能提供最简但完整的 ui.Rserver.R 文件吗? - juba
我已经更新了问题,并提供了一个更完整的代码示例;该文件有几千行,因此我正在尝试仅粘贴必要的部分。如果我漏掉了任何内容,请告诉我,谢谢! - JayCo
1个回答

16

这个问题可以通过 sanitize.text.function = function(x) x 来解决;

需要像这样包含它:

output$example <- renderTable({
   table <- someTable_Data_here
   table
}, sanitize.text.function = function(x) x) 

这是要点 在这里


另外,请注意,

我已经注意到您可以在 renderTable 函数内调用xtable,它将正确地呈现表格。

但是,请注意,您传递给xtable的选项不起作用! 相反,您需要将这些选项传递给“renderTable”函数。

因此,如果您想调用此内容:

output$example <- renderTable({
   table <- someTable_Data_here
   xtable(table, align=c("llr"))
}, sanitize.text.function = function(x) x) 

你需要做的是:

output$example <- renderTable({
   table <- someTable_Data_here
   table
},align=c("llr"), sanitize.text.function = function(x) x) 

RStudio 团队和 RShiny 的开发者们真是太棒了。我相信还有很多文档正在编写中,希望这篇文章能在此期间对某些人有所帮助。


1
renderDataTable有没有类似于sanitize.text.function的等效函数?谢谢! - harkmug
看起来不太可能,因为sanitize.text.function是来自xtable包,该包本身就会写入HTML - renderTable只是将参数传递给它。也许可以以一种方式嵌入HTML,使renderDataTable能够正确显示它...但这听起来像是一个新问题! - JayCo
你不需要对 renderDataTable 进行任何文本处理 - 它会自动渲染 HTML。但是需要注意的是,当前实现(2014年11月1日)将按字母顺序排序您的样式化 HTML,而不转义 HTML!我已经提交了一个错误报告。 - JayCo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接