闪亮柱渲染错误
Shiny Column rendering error
这是本link提供的一个Q on the Column渲染示例(4.4)。
http://rstudio.github.io/DT/options.html
我已经实现了上述示例代码,使用前 100 个字符加上省略号 (...) 来缩写大于 100 个字符的字符串,当您将鼠标悬停在细胞。只要具有自定义呈现的列中包含全文,这就可以正常工作。但是,当它遇到一个空单元格时,table 不会显示,它会在闪亮的浏览器上显示“Processing...”。禁用此自定义呈现后,我可以按预期显示带有空字段的 table。
有没有人有类似的问题,有什么建议可以克服这个问题吗?
下面是我的自定义列渲染代码。
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: 有没有比省略号/工具提示更好的显示数据的方法?
代码太大无法全部粘贴,因此只选择我注意到问题的部分。我希望它有所帮助。
条件data.length > 100
还不够,需要先确定data
是字符串。在您的情况下,data
可能是 null
(从 R 的 NA
转换为 JavaScript),而 null.length
将触发错误。替换
type === 'display' && data.length > 100
条件更严格:
type === 'display' && typeof data === 'string' && data.length > 100
这是本link提供的一个Q on the Column渲染示例(4.4)。 http://rstudio.github.io/DT/options.html
我已经实现了上述示例代码,使用前 100 个字符加上省略号 (...) 来缩写大于 100 个字符的字符串,当您将鼠标悬停在细胞。只要具有自定义呈现的列中包含全文,这就可以正常工作。但是,当它遇到一个空单元格时,table 不会显示,它会在闪亮的浏览器上显示“Processing...”。禁用此自定义呈现后,我可以按预期显示带有空字段的 table。 有没有人有类似的问题,有什么建议可以克服这个问题吗?
下面是我的自定义列渲染代码。
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: 有没有比省略号/工具提示更好的显示数据的方法? 代码太大无法全部粘贴,因此只选择我注意到问题的部分。我希望它有所帮助。
条件data.length > 100
还不够,需要先确定data
是字符串。在您的情况下,data
可能是 null
(从 R 的 NA
转换为 JavaScript),而 null.length
将触发错误。替换
type === 'display' && data.length > 100
条件更严格:
type === 'display' && typeof data === 'string' && data.length > 100