UI 之外用于 javascript 链接的闪亮模块命名空间

2023-12-10

我正在尝试使用闪亮的模块来重用 UI 和服务器代码来呈现共享相同演示文稿的三个不同数据集。

在 UI/服务器代码之外使用基于 JavaScript 的模态弹出链接创建时,在处理命名空间时遇到了一些挑战。

这是我的非工作应用程序代码:

library(shiny)
library(shinyBS)
library(DT)

df <- data.frame(id = c('a', 'b', 'c'), value = c(1, 2, 3))

on_click_js = "
Shiny.onInputChange('myLinkName', '%s');
$('#myModal').modal('show')
"

convert_to_link = function(x) {
  as.character(tags$a(href = "#", onclick = sprintf(on_click_js, x), x))
}
df$id_linked <- sapply(df$id, convert_to_link)
df <- df[, c('id_linked', 'value')]

mySampleUI <- function(id) {
  ns <- NS(id)

  fluidPage(
    mainPanel(
      dataTableOutput(ns('myDT')),
      bsModal(id = 'myModal',
              title = 'My Modal Title',
              trigger = '',
              size = 'large',
              textOutput(ns('modalDescription'))
      ),
      width = 12
    )
  )
}

ui <- fluidPage(mySampleUI('myUI'))

myServerFunc <- function(input, output, session, df) {
  output$myDT <- DT::renderDataTable({
    datatable(df, escape = FALSE, selection='none')
  })
  output$modalDescription <- renderText({
    sprintf('My beautiful %s', input$myLinkName)
  })
}

server <- function(input, output) {
  callModule(myServerFunc, 'myUI', df)
}

shinyApp(ui = ui, server = server)

工作版本将成功显示myLinkName在模式弹出窗口的描述部分。此代码不起作用的原因是 UI 组件 ID 值是在 UI 代码外部创建的,没有命名空间包含。我明白了。但是,我无法弄清楚如何重新处理它以使名称空间匹配。

有什么想法/选择吗?


我创建了一个示例应用程序,它将向数据表的每一行添加一个按钮,如果按下该按钮,它将根据该行创建一个绘图。请注意,单击的行也会被记录以供以后使用,并保存在名为的变量中SelectedRow()。如果您需要更多说明,请告诉我

rm(list = ls())
library(DT)
library(shiny)
library(shinyBS)
library(shinyjs)
library(shinydashboard)

# This function will create the buttons for the datatable, they will be unique
shinyInput <- function(FUN, len, id, ...) {inputs <- character(len)
                                           for (i in seq_len(len)) {
                                             inputs[i] <- as.character(FUN(paste0(id, i), ...))}
                                           inputs
}

ui <- dashboardPage(
  dashboardHeader(title = "Simple App"),
  dashboardSidebar(
    sidebarMenu(id = "tabs",
                menuItem("Menu Item 1", tabName = "one", icon = icon("dashboard"))
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName = "one",h2("Datatable Modal Popup"),
              DT::dataTableOutput('my_table'),uiOutput("popup")
              )
    )
  )
)

server <- function(input, output, session) {
  my_data <- reactive({
    testdata <- mtcars
    as.data.frame(cbind(View = shinyInput(actionButton, nrow(testdata),'button_', label = "View", onclick = 'Shiny.onInputChange(\"select_button\",  this.id)' ),testdata))
  })  
  output$my_table <- DT::renderDataTable(my_data(),selection = 'single',options = list(searching = FALSE,pageLength = 10),server = FALSE, escape = FALSE,rownames= FALSE)

  # Here I created a reactive to save which row was clicked which can be stored for further analysis
  SelectedRow <- eventReactive(input$select_button,{
    as.numeric(strsplit(input$select_button, "_")[[1]][2])
  })

  # This is needed so that the button is clicked once for modal to show, a bug reported here
  # https://github.com/ebailey78/shinyBS/issues/57
  observeEvent(input$select_button, {
    toggleModal(session, "modalExample", "open")
  })

  output$popup <- renderUI({
    print(input$select_button)
    bsModal("modalExample", "Sample Plot", "", size = "large",
            column(12,renderPlot(plot(rnorm(1:10),type="l",col="red",main = paste0("You selected Row Number: ",SelectedRow())))
                   )
            )
  })
}

shinyApp(ui, server)

第 1 步:生成带有按钮的表格

正如你所看到的,有一个按钮叫做View对于每一行

enter image description here

第 2 步:单击按钮后,将生成绘图

请注意,绘图的标题会根据单击的行而变化

enter image description here

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

UI 之外用于 javascript 链接的闪亮模块命名空间 的相关文章

  • 查找数据帧列表中同一列中的所有重复值并将其转换为 NULL

    我有一个清单BELGIAN COAST list包含数百个数据帧 df1 df2 15 列 X 1000 行 每个数据帧的最后一列称为Chemicals并包含一些字符 例如Sulfate or Ammonia 但是这一列有很多行Chemic
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • R 更改小数位且不四舍五入

    gt signif 1 89 digits 2 1 1 9 我想要1 8 这有点笨拙 但它会起作用并保持所有数字 x lt 1 829380 trunc dec lt function x n floor x 10 n 10 n Resul
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • fread 将空导入为 NA

    我正在尝试导入带有空白的 csv 读取为 不幸的是他们都读作 NA now 为了更好地演示问题 我还展示了如何NA NA and 都映射到同一事物 除了最底部的示例 这将妨碍简单的解决方法dt is na dt lt gt write cs
  • 使用outer代替expand.grid

    我正在寻找尽可能快的速度并留在基地做该做的事expand grid做 我用过outer为过去类似的目的创建一个向量 像这样的东西 v lt outer letters LETTERS paste0 unlist v lower tri v
  • r 中的 5 维图

    我正在尝试在 R 中绘制 5 维图 我目前正在使用rgl包以 4 个维度绘制数据 使用 3 个变量作为 x y z 坐标 另一个变量作为颜色 我想知道是否可以使用这个包添加第五个变量 例如空间中点的大小或形状 这是我的数据和当前代码的示例
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 在 R 中使用 Huggingface Transformer 模型

    我正在尝试在 R 中使用不同的 Huggingface 模型 这是通过 reticulate 导入 Transformer 包来实现的 谢谢 https rpubs com eR ic transfoRmers https rpubs co
  • 使用 dplyr::filter 的整洁方式是什么?

    使用下面的函数调用foo c b 输出以内联方式显示 正确的写作方式是什么df gt filter x gt x 我已经包含了一个使用的示例mutate以整洁的风格与之对比filter foo lt function variables x
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • 如何从shiny中将数据下载到多张纸上?

    我们如何将数据从 Shiny 下载到多个工作表并命名每个工作表 例如下面 ginberg将mtcars数据保存在sheet1中 我们可以将头部 mtcars 保存在sheet2中吗 另外 我们可以对这些工作表进行不同的命名吗 例如sheet
  • R Tidytext 和 unnest_tokens 错误

    对 R 非常陌生 已经开始使用 tidytext 包 我正在尝试使用参数来填充unnest tokens函数 这样我就可以进行多列分析 所以而不是这个 library janeaustenr library tidytext library
  • 迭代字符串 R 的字符

    有人可以解释一下为什么这不会在 R 中单独打印所有数字 numberstring lt 0123456789 for number in numberstring print number 字符串不就是字符数组吗 在 R 中该怎么做 In
  • R中将矩阵拆分为子矩阵的函数

    我有一个 16 行 12 列的矩阵 M 我想将其拆分为 16 个矩阵的数组 每个矩阵有 4 行 3 列 我可以通过以下方式手动完成 M matrix sample 0 127 16 12 replace TRUE c 16 12 ma1 M
  • ggplot2 可视化/显示中的地图错误?

    正如您在下面看到的 我使用 ggplots 制作的地图上存在一个奇怪的显示问题 任何投影似乎都会发生同样的问题 这是代码 仅包maps and ggplot2需要 mapWorld lt borders world colour gray5
  • 在 Ubuntu Lucid 中从二进制安装 R 包

    我已经使用以下命令在 Ubuntu Lucid 中安装了 R sudo aptitude 安装 r base 当我尝试 install packages 时 它似乎会下载源代码 然后花费很长时间来编译它 我怎样才能像我在 Windows 上
  • 基于条件反应逻辑闪亮的 Flexdashboard

    我正在尝试有条件地进行一种类型的渲染 renderPlot 或其他 renderText 基于一些输入 这是我尝试过的 title Citation Extraction output flexdashboard flex dashboar

随机推荐