在Shiny R中,有没有办法在observeEvent之后立即运行observeEvent而没有延迟(renderUI的问题)?

2023-12-06

好吧,我的标题有点令人困惑,但让我解释一下。

我正在使用 renderUI 来获取音频标签,但是,我想以较低的音量启动音频,因为它太大声了。

下面的代码工作正常,除了因为我添加了延迟,它以较高的音量开始,然后迅速转到较低的音量,但它仍然非常明显。降低延迟没有帮助,我已经尝试过了。如果我删除延迟,两个observeEvents将同时运行,并且音量不会改变。如果我将 js$runs 标签(降低音量)移动到第一个observeEvent 中,它也不起作用。我认为这是因为在observeEvent完全完成之前renderUI实际上并没有渲染。另外,我认为我无法删除 renderUI,因为在我的完整应用程序中,我需要用户输入来播放音频。

有没有办法最初以较低的音量启动音频标签? 或者有没有办法立即运行renderUI,这样就不会出现延迟?

感谢所有帮助,谢谢。

library(shiny)
library(shinyjs)


jsCode <- 'shinyjs.runs = function setHalfVolume() {document.getElementById("myaudio").volume = 0.2;}'

get_audio <- function(){
    tags$audio(id = "myaudio", controls = NA, autoplay = NA, tags$source(src="aud.mpeg"))
}


ui <- fluidPage(
    useShinyjs(),
    extendShinyjs(text = jsCode),

    uiOutput("my_audio"),

    actionButton("guessbutton", "Submit")
)

server <- function(input, output) {
    observeEvent(input$guessbutton, {
        output$my_audio <- renderUI(get_audio())
        #js$runs()
    })

    observeEvent(input$guessbutton, {
        delay(100, js$runs())
    })
}

shinyApp(ui = ui, server = server)

据我所知你需要放弃renderUI为了这个工作。否则id当您尝试立即降低音量时,您的音频标签将不存在(请参阅浏览器的控制台以获取相应的错误消息)。

我建议您仅生成一次音频标签,并降低应用程序或会话启动时的音量,同时动态更改src音频标签的参数。

请参阅以下内容:

library(shiny)
library(shinyjs)

if(!dir.exists("www")){
    dir.create("www")
}

if(!file.exists("./www/Flamenco.ogg")){
    # for license see: https://commons.wikimedia.org/wiki/File:JCZA_-_JCzarnecki-Flamenco.ogg
    download.file("https://upload.wikimedia.org/wikipedia/commons/7/76/JCZA_-_JCzarnecki-Flamenco.ogg", destfile = "./www/Flamenco.ogg", mode = "wb") 
}

ui <- fluidPage(
    useShinyjs(),
    tags$audio(id = "myaudio", controls = NA, autoplay = NA, src = ""),
    p(),
    actionButton("guessbutton", "Submit")
)

server <- function(input, output) {
    runjs("document.getElementById('myaudio').volume = 0.2;") # initially reduce volume
    observeEvent(input$guessbutton, {
        runjs(sprintf("document.getElementById('myaudio').src = '%s';", "Flamenco.ogg")) # dynamically change src, replace "Flamenco.ogg" with your user input
    })
}

shinyApp(ui = ui, server = server)

PS:你可以使用shinyjs'hidden, hide and show or conditionalPanel如果您想对用户隐藏音频标签,直到按下该按钮。

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

在Shiny R中,有没有办法在observeEvent之后立即运行observeEvent而没有延迟(renderUI的问题)? 的相关文章

  • 合并数据后,ggplot2 geom_polygon 的映射变得疯狂

    我正在尝试制作一个包含美国大区域地图的网格 我从形状文件创建一个 SpatialPolygonDataframe 然后将其转换为data frame以使用ggplot2 一旦我将数据添加到框架中 多边形就会绘制出来 包含 SpatialPo
  • R中引用和表达式的区别

    gettypes function x paramx substitute x print typeof paramx print class paramx print mode paramx gettypes expression sin
  • r + dplyr 过滤时间序列

    我有一些数据观察了一群人以及他们随时间推移所吃的水果 我想使用 dplyr 来观察每个人 直到他们吃香蕉并总结他们吃的所有水果直到他们吃第一根香蕉 data data lt structure list user c 1234L 1234L
  • 如何根据时间戳列制作时间跨度列?

    我有一个数据表 其中第 1 列中包含时间戳 第 2 列中包含事件 时间戳的格式为Y m d H M OS3 e g 2019 09 26 07 29 22 778 我想添加一个新列 其中包含时间戳 2 到时间戳 1 之间的差异的时间跨度值
  • 如何在 sqlite3 数据库中存储音频文件并在 iphone 中播放它们?

    我想在数据库中存储音频文件 任何支持 mp3 wav 和 iphone 的格式 并在 iPhone 上播放它们 知道如何做到这一点吗 我不知道为什么你想将音频文件存储在 SQL 数据库中 但 sqlite3 支持 BLOB 因此 将它们存储
  • R 中带有 ggplot 的背景带

    我正在尝试为不同的组创建箱线图 我想用 3 个水平条带为背景着色 中心观测值 其中所有观测值均接近总体平均值 平均值 体重 0 5 另外 2 个带是下面的和上面的 这些是我的情节 library ggplot2 bp lt ggplot d
  • 将数据框中的变量强制为适当的格式

    我正在处理一个由多种不同数据类型 数字 字符 时间戳 组成的数据帧 但不幸的是它们都作为字符接收 因此 我需要动态且尽可能高效地将它们强制转换为 适当 的格式 考虑以下示例 df lt data frame val1 c 1 2 3 4 v
  • 如何有效地将多个 rgl 图连接成一个图?

    我用以下命令制作了 3D 绘图rgl打包我的数据的每个因子级别并将它们保存为 png 我的数据有 30 个不同的级别 从而产生了 30 个不同的图像文件 现在我想将这些 png 合并成一个图 我会这样显示它们 下面的例子说明了我想做的事情
  • 计算一行中某些单元格中有多少个值不为 NA(在 R 中)

    我有一个包含很多列的数据框 对于数据帧的每一行 我想计算有多少列是 NA 的 问题是我只对其中的几列感兴趣 并且想要 有效地 调用这些列 按照我在下面的假样本中所做的方式使用 mutate 给了我正确的答案 library stringr
  • r 选择数据框中某个值以下和之后的值

    我有一个问题如何从表中选择某些值 我有一个包含时间和值的表 我想在特定时间之后获取下面的行 示例 Data Frame Time Value 02 51 0 08033405 05 30 0 43456738 09 45 0 3605207
  • 在 R 中管理元数据的最佳方法是什么? [复制]

    这个问题在这里已经有答案了 在分析数据时 有关变量的元数据极其重要 您如何在 R 中管理这些信息 例如 有没有办法指定将打印的标签而不是变量名称 R中有哪些工具可以实现这一点 我想到的快速建议是 将数据与对象一起存储的属性 正如 Frank
  • 在 ggduo 散点图矩阵中显示相关指数

    我有这样的事情 library GGally df data frame runif 100 rnorm 100 rgamma 100 1 2 rt 100 1 rf 100 1 2 ggduo df columnsX 1 2 column
  • 更改 ggplot 对象的数据集

    我正在绘制数据的子集ggplot2我想知道我是否会以某种方式使用已包含在ggplot原始数据子集中的对象 举个例子 这是第一个图 代码块 1 require ggplot2 p lt ggplot mtcars aes mpg wt col
  • 将函数应用于因子相关子矩阵

    我有一个对称矩阵 数据框 看起来像 structure list HQ673618 1 c NA 90 8 89 8 89 6 89 8 88 9 87 8 88 2 88 3 HQ674317 1 c 90 8 NA 98 6 97 7
  • 如何在 R 中建立具有某些条件的排列[重复]

    这个问题在这里已经有答案了 我是 R 新手 有点困惑 假设我有一个向量 c 1 2 3 4 5 6 我想生成具有四个元素的排列 每个排列应涉及 1 和 5 谢谢 您可以使用permutations https www rdocumentat
  • 如何从包含 htmlwidget 的 rmarkdown 文件生成 md 文件

    我正在用这个 rmd 创建一个 html 文件 title test author me date r Sys Date output html document r data HairEyeColor rpivotTable rpivot
  • 更改 geom_text 的默认“a”图例以标记字符串本身

    类似于这个问题 https stackoverflow com questions 18337653 remove a from legend when using aesthetics and geom text 我想更改图例中的默认 a
  • R - 按列比较两行并将结果写入表中

    我是 R 新手 可能我的问题的解决方案非常简单 但目前我无法实现 我想按列比较数据框中的行 每列中的数据是一个字母 核苷酸碱基 seq1 A C T G T seq2 A C G G G seq3 A G G C A 我想按列比较数据集中的
  • Python 是否有相当于 R 的sample() 函数?

    我想知道Python是否有相当于sample R 中的函数 The sample https stat ethz ch R manual R devel library base html sample html函数使用带替换或不带替换的方
  • 按字符分隔字段中的变量

    我最近问了这个问题单独的字段内容 https stackoverflow com questions 53309849 separate contents of field并得到了一个非常快速且非常简单的答案 我在 Excel 中可以简单地

随机推荐