将 Sparkline htmlwidget 包含在 Shiny 应用程序的数据表单元格中,而无需诉诸(太多)JavaScript

2024-01-04

我正在使用sparkline包生成条形图并将其放入单元格中datatable在闪亮的应用程序中。我已经成功地在独立的环境中产生了所需的输出datatable,但是当我将其放入 Shiny 应用程序时,它不起作用。这可能与如何进行有关spk_add_deps()标识 htmlwidgets。我试过移动spk_add_deps()运行了相当多的函数并向其传递了各种标识符,但没有任何效果。

我确实在这里发现了本质上相同的问题在 Shiny 中使用迷你图渲染数据表 https://stackoverflow.com/questions/41477776/render-datatable-with-sparklines-in-shiny但给定的解决方案 (1) 依赖于在回调函数中编写迷你图的 JavaScript 代码(违背了让 Rsparkline()函数)和(2)看来,如果迷你图在查看器中呈现,那么我们离让它们在 Shiny 应用程序中呈现而无需编写所有 JavaScript 的距离就不远了。

这是演示:

# Preliminary, load packages and build a demo table with the sparkline code merged in
library(shiny)
library(DT)
library(data.table)
library(sparkline)

## Create demo data sets
my_mtcars <- data.table(mtcars, keep.rownames = TRUE)
names(my_mtcars)[1] <- 'car_id'

set.seed(0)
data_for_sparklines <- data.table(car_id = rep(my_mtcars$car_id, 5),
                                  category = 1:5,
                                  value = runif(160))

sparkline_html <- data_for_sparklines[, .(sparkbar = spk_chr(value, type = 'bar')), by = 'car_id']
my_mtcars <- merge(my_mtcars, sparkline_html, by = 'car_id')

现在,如果我单独渲染数据表,迷你图条形图就会出现:

spk_add_deps(datatable(my_mtcars, escape = FALSE))

但如果我将相同的内容嵌入到闪亮的应用程序中,该列将为空白:

ui <- shinyUI(fluidPage(
  dataTableOutput('myTable')
))

server <- shinyServer(function(input, output, session) {
  output$myTable <- renderDataTable(spk_add_deps(datatable(my_mtcars, escape = FALSE)))
}) 

shinyApp(ui = ui, server = server)

找到了解决方案,使用htmlwidgets包裹。

library(htmlwidgets)

然后代替spk_add_deps() use getDependency()在 Shiny UI 函数中加载迷你图依赖项:

ui <- shinyUI(fluidPage(
  getDependency('sparkline'),
  dataTableOutput('myTable')
))

由于我不完全理解的原因,添加一个回调renderDataTable()到 HTML 小部件staticRender()功能:

server <- shinyServer(function(input, output, session) {
  staticRender_cb <- JS('function(){debugger;HTMLWidgets.staticRender();}') 
  output$myTable <- renderDataTable(my_mtcars,
                                    escape = FALSE,
                                    options = list(drawCallback = staticRender_cb))
}) 

但就是这样,这就是让它们在 Shiny 应用程序中渲染所需的全部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Sparkline htmlwidget 包含在 Shiny 应用程序的数据表单元格中,而无需诉诸(太多)JavaScript 的相关文章

随机推荐

  • 如何在 C++ 中比较两个位图屏幕截图的字节到字节

    在问题的最后我的最后编辑 大家好 我必须实现一个功能来比较屏幕一部分的两个镜头 以便知道是否存在差异 变化 我写了类似下面的代码 但我无法让它工作 在代码中 COORDINATES RECT 是一个结构体 typedef struct CO
  • 当 Windows 进入睡眠模式然后唤醒时 setTimeout 不起作用

    我在 Chrome 中注意到了这一点 有人知道出了什么问题或解决方法吗 您可以使用setInterval相反 它继续运行 如果您需要一次性解决方案 请使用clearInterval删除计时器 setInterval如果计算机处于睡眠状态 而
  • 在视图模式中打开会话

    鉴于我选择的 JPA Hibernate 实现 Spring 和 开发框架 我问这个问题 我一直在思考实体层中的关系 例如 我有一个包含许多订单行的订单实体 我已经设置了我的应用程序 以便它急切地加载每个订单的订单行 您是否认为这是一种解决
  • C 使用信号同步进程

    好吧 我正在尝试自学如何发送信号 但我遇到了一个小问题 我不知道我做错了什么 现在发生的事情是 它正在执行父级 然后转到子级 然后返回父级 它没有执行我希望它执行的操作 即执行父级 用户定义其运行的时间量 然后杀死它然后转到子进程并在相同的
  • 使 tkinter 按钮大小相同

    我想让所有 tkinter 按钮的大小相同 无论文本如何 是否可以拉伸其他按钮以相互匹配或设置特定尺寸 因为我很难在文档中找到如何执行此操作 目前 按钮根据文本的大小进行拉伸 我的意思的例子 https i stack imgur com
  • 在 Selenium IDE 中使用 waitForCondition ( script,timeout )

    我使用 Firefox 的 Selenium IDE 扩展录制了一个脚本 我想添加命令 waitForCondition 我发现它需要两个参数 脚本和超时 在 Selenium IDE 中 每个命令都有 3 个文本字段 命令名称 我假设为
  • SendMessage(WM_COPYDATA) + 记录 + 字符串

    我想发送一条记录 现在只有一个字符串 但我将添加更多变量 这是我第一次处理记录 所以这可能是一个愚蠢的问题 但是 为什么这有效 type TDataPipe record WindowTitle String 255 end var Dat
  • Typescript 自动获取类中的接口属性

    你好 TypeScript 专家 我有以下代码 但我必须在类中重复接口属性 否则我会得到 类错误地实现了接口 使用接口时 是否有 TypeScript 简写可以执行此操作而无需声明Id number 以及该类中的所有其他属性 谢谢 inte
  • AffineTransform 不变换 Stroke?

    使用 Graphics2D 时scale 具有两个不同参数的函数 在 x 和 y 方向按不同比例缩放 稍后在此 Graphics2D 对象上绘制的所有内容也会缩放 这会产生奇怪的效果 即在一个方向上绘制的线条比在另一方向上绘制的线条更粗 下
  • EF Code First:获取 DbContext 的所有 POCO 类型

    有没有办法从指定的 DbContext 实例获取 POCO 的类型 您需要访问元数据工作区 http msdn microsoft com en us library system data metadata edm metadatawor
  • 如何在 Windows 上使 add_custom_command 配置特定?

    为了在我的一个项目中运行单元测试 我有一个自定义命令 它将可执行文件 库和其他相关文件复制到其他位置 以便它们可以使用特定的设置运行 而不是在它们所在的位置运行它们建造的 在 Linux 上 这非常简单 但在 Windows 上 我遇到了一
  • 如何同时编辑单词的所有突出显示实例?

    在 Notepad 中 每当您选择 HTML 文档 或 CSS 中的任何单词时 类似的单词都会自动突出显示 是否有一个快捷方式可以用来一次编辑所有这些突出显示的片段 目前 Notepad 6 9 2 版本中尚未内置选择所有相似文本并进行编辑
  • 如何使用 pubsub 模拟器在本地调用 firebase Schedule 函数

    我正在研究云功能 尤其是日程功能 我需要每 5 分钟定期触发一个函数 但仅在测试步骤中 我需要在 pubsub 模拟器上运行它而不部署它 怎么做 我尝试使用 firebase shell 但它只触发一次 exports scheduledF
  • 如何在 Windows 上安装和使用 cURL? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我无法在 Windows 上运行 cURL 我已经从以下位置下载了 cURL zip 文件here https curl haxx se
  • 通过 Firebase 动态链接传递多个参数 Android

    我使用了 Firebase Dynamics 链接 它可以打开我的应用程序 转到 Play 商店或转到 URL 但是当我通过链接传递一些参数时 我只能获取第一个参数 这是我的动态链接 https xx app goo gl link htt
  • 从其他库重新导出共享库符号 (OS X / POSIX)

    我的问题是 OS X on x86 64 特定的 但更值得赞赏的是适用于其他 POSIX 操作系统的通用解决方案 给定一些共享库 下面称为原始库 的符号名称列表 我希望我的共享库重新导出这些符号 重新导出 就像有人尝试根据我的库解析符号一样
  • 如何在 C# 中通过 VLC api 流式传输视频

    我正在从事视频广播的小型家庭项目 我找到了一些例子Example http csharpmagics blogspot com 但它不起作用 因为需要旧版本的库0 8 6 所以我找到了它 但是当我尝试从 API 获取组件时 我对非托管代码有
  • java.nio.file.FileAlreadyExistsException如何在java7中解决这个问题

    我正在编写代码 我正在使用 java nio api 创建一个目录 我的代码段是 Path target Paths get folder path xx 0 Set
  • 如何从 vue-router 访问 vuex getter 并设置守卫?

    我正在尝试使用 Vue 进行操作 但遇到了一些麻烦 1 我无法从 router index js 文件访问我的 getters 我可以访问它 但它像带有返回函数的函数一样返回 我无法调用并获取值 2 我无法正确设置守卫 使用 Angular
  • 将 Sparkline htmlwidget 包含在 Shiny 应用程序的数据表单元格中,而无需诉诸(太多)JavaScript

    我正在使用sparkline包生成条形图并将其放入单元格中datatable在闪亮的应用程序中 我已经成功地在独立的环境中产生了所需的输出datatable 但是当我将其放入 Shiny 应用程序时 它不起作用 这可能与如何进行有关spk