【问题标题】:Shiny Column rendering error闪亮的列渲染错误
【发布时间】:2016-01-11 12:02:34
【问题描述】:

这是此链接中提供的列渲染示例 (4.4) 上的 Q。 http://rstudio.github.io/DT/options.html

我已经实现了上面描述的示例代码,以使用前 100 个字符加上省略号 (...) 来缩写超过 100 个字符的字符串,当您将鼠标悬停在单元格上时,完整的字符串会显示为工具提示。只要具有自定义呈现的列中包含全文,这就会很好地工作。但是,当它遇到一个空单元格时,表格不会显示,它会在闪亮的浏览器上显示“正在处理...”。禁用此自定义渲染后,我可以按预期显示带有空字段的表格。 有没有人有类似的问题,有什么建议可以解决这个问题吗?

下面是我的自定义列渲染代码。

output$PM_output <- DT::renderDataTable(
    expr =  DT::datatable(PubmedOutput(PubmedSearch()),
                          class   = 'cell-border stripe compact hover',
                          escape  = F, selection = 'multiple',
                          options = list(
                            initComplete = JS("function(settings, json) {",
                                "$(this.api().table().header()).css({
                                'background-color': '#303030',
                                'color': '#FFFF00'});","}"),
                            autoWidth  = T,
                            LengthMenu = c(5, 30, 50),
                             columnDefs = list(list(
                               targets  = 6,
                               render   = JS(
                                 "function(data, type, row, meta) {",
                                 "return type === 'display' && data.length > 100 ?",
                                 "'<span title=\"' + data + '\">' +
                                 data.substr(0, 100) + '...</span>' : data;", "}"))),
                            columnDefs = list(list(
                              targets  = c(1:8),
                              className = 'dt-center')),
                            pageLength = 1, server = T)))

生成我已通过自定义渲染的第 6 列的代码。

PM.ID <- c("26391251","26372702","26372699","26371045") # does not output table
fetch.pubmed <- entrez_fetch(db = "pubmed", id = PM.ID,
                             rettype = "xml", parsed = T)
abstracts = xpathApply(fetch.pubmed, '//PubmedArticle//Article', function(x) xmlValue(xmlChildren(x)$Abstract))
abstracts #  ID 26372702, 26372699 has no abstract. and returns NA

任何意见和建议。 P.S:除了省略号/工具提示之外,还有更好的方法来显示数据吗? 代码太大,无法全部粘贴,因此只选择我注意到问题的部分。我希望它有所帮助。

【问题讨论】:

    标签: r shiny dt


    【解决方案1】:

    条件data.length &gt; 100不够:你需要先确定data是一个字符串。在您的情况下,data 可能是 null(从 R 的 NA 转换为 JavaScript),null.length 将触发错误。替换

    type === 'display' && data.length > 100
    

    条件更严格:

    type === 'display' && typeof data === 'string' && data.length > 100
    

    【讨论】:

    • 这是传递参数的正确方法吗?我没有显示任何文字columnDefs = list(list(targets = 6,render = JS("function(data, type, row, meta) {","return type === 'display'","typeof data === 'string' &amp;&amp; data.length &gt; 100 ?","'&lt;span title=\"' + data + '\"&gt;' +data.substr(0, 100) + '...&lt;/span&gt;' : data;", "}"))),
    • "return type === 'display' &amp;&amp; data.length &gt; 100 ? ", "typeof data === 'string' ", 这不显示任何文本。上面注释中的代码在第 6 列显示“True”。如果我传递参数的方式错误,请告诉我。谢谢
    • 嗨 yuhi,非常感谢。实现您编辑的代码会弹出警告unknown parameter 6 for row 0 check notes indatatables.net/manual/tech-notes/4。当我单击确定时,它没有在第 6 列中显示文本。因此,我按照文本注释中描述的故障排除步骤进行操作。我试图将defaultContent:" " 实现为第 6 列的空值,它没有显示任何表格。请在Q中找到新编辑的代码。
    • 我相信defaultContent 完全不相关。请在开始尝试之前粘贴您尝试过的内容defaultContent
    • 请找到带有完整代码的Edit-2。这给出了我在之前的评论中提到的警告。当我在弹出窗口上单击“确定”时,它会显示表格,但第 6 列中没有任何内容。
    猜你喜欢
    • 2015-01-11
    • 2016-06-12
    • 2021-06-19
    • 2021-06-17
    • 2018-01-25
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多