反应式闪亮模块共享数据

2023-12-31

我正在尝试使用模块创建一个闪亮的应用程序。两个数据帧(表 a 和 b)是反应性的并且可以修改,第三个数据帧(表 c)也是反应性的并且基于表 a 和 b。

我尝试按照这个question https://stackoverflow.com/questions/46555355/passing-data-within-shiny-modules-from-module-1-to-module-2它对文本输入而不是数据框执行相同的操作,但我的代码不起作用 - 我得到一个object of type closure is not subsettable error.

谢谢你的帮助。

### Libraries
library(shiny)
library(tidyverse)
library(DT)    

### Data----------------------------------------

table_a <- data.frame(
  id=seq(from=1,to=10),
  x_1=rnorm(n=10,mean=0,sd=10),
  x_2=rnorm(n=10,mean=0,sd=10),
  x_3=rnorm(n=10,mean=0,sd=10),
  x_4=rnorm(n=10,mean=0,sd=10)
) %>% 
  mutate_all(round,3)

table_b <- data.frame(
  id=seq(from=1,to=10),
  x_5=rnorm(n=10,mean=0,sd=10),
  x_6=rnorm(n=10,mean=0,sd=10),
  x_7=rnorm(n=10,mean=0,sd=10),
  x_8=rnorm(n=10,mean=0,sd=10)
)%>% 
  mutate_all(round,3)


### Modules------------------------------------ 

mod_table_a <- function(input, output, session, data_in,reset_a) {

  v <- reactiveValues(data = data_in)
  proxy = dataTableProxy("table_a")

  #set var 2
  observeEvent(reset_a(), {
    v$data[,"x_2"] <- round(rnorm(n=10,mean=0,sd=10),3)
    replaceData(proxy, v$data, resetPaging = FALSE) 
  })

  # render table
  output$table_a <- DT::renderDataTable({

    DT::datatable(
      data=v$data,
      editable = TRUE,
      rownames = FALSE,
      class="compact cell-border",
      selection = list(mode = "single", 
                       target = "row"
                       ),
      options = list(
        dom="t",
        autoWidth=TRUE,
        scrollX = TRUE,
        ordering=FALSE,
        bLengthChange= FALSE,
        searching=FALSE
      )
    )
  })

  return(v)

}

mod_table_b <- function(input, output, session, data_in,reset_b) {

  v <- reactiveValues(data = data_in)
  proxy = dataTableProxy("table_b")

  #reset var
  observeEvent(reset_b(), {
    v$data[,"x_6"] <- round(rnorm(n=10,mean=0,sd=10),3)
    replaceData(proxy, v$data, resetPaging = FALSE)  # replaces data displayed by the updated table
  })

  # render table
  output$table_b <- DT::renderDataTable({

    DT::datatable(
      data=v$data,
      editable = TRUE,
      rownames = FALSE,
      class="compact cell-border",
      selection = list(mode = "single", 
                       target = "row"
      ),
      options = list(
        dom="t",
        autoWidth=TRUE,
        scrollX = TRUE,
        ordering=FALSE,
        bLengthChange= FALSE,
        searching=FALSE
      )
    )
  })

  return(v)
}

mod_table_c <- function(input, output, session, tbl_a_proxy,tbl_b_proxy) {

  v <- reactive({
  table_c <- data.frame(id=seq(from=1,to=10)) %>%
    left_join(tbl_a_proxy$data,by="id") %>%
    left_join(tbl_b_proxy$data,by="id") %>%
    mutate(y_1=x_1+x_6)%>%
    select(x_2,x_6,y_1)
  })


  # render table
  output$table_c <- DT::renderDataTable({

    DT::datatable(
      data=v$table_c,
      editable = TRUE,
      rownames = FALSE,
      class="compact cell-border",
      selection = list(mode = "single", 
                       target = "row"
      ),
      options = list(
        dom="t",
        autoWidth=TRUE,
        scrollX = TRUE,
        ordering=FALSE,
        bLengthChange= FALSE,
        searching=FALSE
      )
    )
  })
}


modFunctionUI <- function(id) {
  ns <- NS(id)
  DT::dataTableOutput(ns(id))
}


### Shiny App---------
#ui----------------------------------
  ui <- fluidPage(
    fluidRow(
      br(),
      column(1,
             br(),
             actionButton(inputId = "reset_a", "Reset a")
             ),
      column(6,
             modFunctionUI("table_a")
      ),
      column(1),
      column(4)
    ),
    fluidRow(
      br(),
      br(),
      column(1,
             br(),
             actionButton(inputId = "reset_b", "Reset b")),
      column(6,
             modFunctionUI("table_b")
      ),
      column(5,
             modFunctionUI("table_c")
             )
    ),
    #set font size of tables
    useShinyjs(),
    inlineCSS(list("table" = "font-size: 10px"))
  )

#server--------------
  server <-  function(input, output) {

    #table a
    tbl_a_proxy <- callModule(module=mod_table_a,
               id="table_a",
               data_in=table_a,
               reset_a = reactive(input$reset_a)
    )

    #table b
    tbl_b_proxy <- callModule(module=mod_table_b,
               id="table_b",
               data_in=table_b,
               reset_b = reactive(input$reset_b)
    )

    #table c
    callModule(module=mod_table_c,
               id="table_c",
               tbl_a_proxy,
               tbl_b_proxy
    )

  }  


  shinyApp(ui, server)

你的问题是在mod_table_c, data=v$table_c没有任何意义,因为v是反应性的并且已经对应于(反应性的)table_c你想显示。因此,您需要将其替换为data=v()(因为反应式表达式需要()当您使用它时,在他们的名字后面)。

这是您更正后的示例:

### Libraries
library(shiny)
library(tidyverse)
library(DT)   
library(shinyjs)

### Data----------------------------------------

table_a <- data.frame(
  id=seq(from=1,to=10),
  x_1=rnorm(n=10,mean=0,sd=10),
  x_2=rnorm(n=10,mean=0,sd=10),
  x_3=rnorm(n=10,mean=0,sd=10),
  x_4=rnorm(n=10,mean=0,sd=10)
) %>% 
  mutate_all(round,3)

table_b <- data.frame(
  id=seq(from=1,to=10),
  x_5=rnorm(n=10,mean=0,sd=10),
  x_6=rnorm(n=10,mean=0,sd=10),
  x_7=rnorm(n=10,mean=0,sd=10),
  x_8=rnorm(n=10,mean=0,sd=10)
)%>% 
  mutate_all(round,3)


### Modules------------------------------------ 

mod_table_a <- function(input, output, session, data_in,reset_a) {

  v <- reactiveValues(data = data_in)
  proxy = dataTableProxy("table_a")

  #set var 2
  observeEvent(reset_a(), {
    v$data[,"x_2"] <- round(rnorm(n=10,mean=0,sd=10),3)
    replaceData(proxy, v$data, resetPaging = FALSE) 
  })

  # render table
  output$table_a <- DT::renderDataTable({

    DT::datatable(
      data=v$data,
      editable = TRUE,
      rownames = FALSE,
      class="compact cell-border",
      selection = list(mode = "single", 
                       target = "row"
      ),
      options = list(
        dom="t",
        autoWidth=TRUE,
        scrollX = TRUE,
        ordering=FALSE,
        bLengthChange= FALSE,
        searching=FALSE
      )
    )
  })

  return(v)

}

mod_table_b <- function(input, output, session, data_in,reset_b) {

  v <- reactiveValues(data = data_in)
  proxy = dataTableProxy("table_b")

  #reset var
  observeEvent(reset_b(), {
    v$data[,"x_6"] <- round(rnorm(n=10,mean=0,sd=10),3)
    replaceData(proxy, v$data, resetPaging = FALSE)  # replaces data displayed by the updated table
  })

  # render table
  output$table_b <- DT::renderDataTable({

    DT::datatable(
      data=v$data,
      editable = TRUE,
      rownames = FALSE,
      class="compact cell-border",
      selection = list(mode = "single", 
                       target = "row"
      ),
      options = list(
        dom="t",
        autoWidth=TRUE,
        scrollX = TRUE,
        ordering=FALSE,
        bLengthChange= FALSE,
        searching=FALSE
      )
    )
  })

  return(v)
}

mod_table_c <- function(input, output, session, tbl_a_proxy,tbl_b_proxy) {

  v <- reactive({
    table_c <- data.frame(id=seq(from=1,to=10)) %>%
      left_join(tbl_a_proxy$data,by="id") %>%
      left_join(tbl_b_proxy$data,by="id") %>%
      mutate(y_1=x_1+x_6)%>%
      select(x_2,x_6,y_1)
  })


  # render table
  output$table_c <- DT::renderDataTable({

    DT::datatable(
      data=v(),
      editable = TRUE,
      rownames = FALSE,
      class="compact cell-border",
      selection = list(mode = "single", 
                       target = "row"
      ),
      options = list(
        dom="t",
        autoWidth=TRUE,
        scrollX = TRUE,
        ordering=FALSE,
        bLengthChange= FALSE,
        searching=FALSE
      )
    )
  })
}


modFunctionUI <- function(id) {
  ns <- NS(id)
  DT::dataTableOutput(ns(id))
}


### Shiny App---------
#ui----------------------------------
ui <- fluidPage(
  fluidRow(
    br(),
    column(1,
           br(),
           actionButton(inputId = "reset_a", "Reset a")
    ),
    column(6,
           modFunctionUI("table_a")
    ),
    column(1),
    column(4)
  ),
  fluidRow(
    br(),
    br(),
    column(1,
           br(),
           actionButton(inputId = "reset_b", "Reset b")),
    column(6,
           modFunctionUI("table_b")
    ),
    column(5,
           modFunctionUI("table_c")
    )
  ),
  #set font size of tables
  useShinyjs(),
  inlineCSS(list("table" = "font-size: 10px"))
)

#server--------------
server <-  function(input, output) {

  #table a
  tbl_a_proxy <- callModule(module=mod_table_a,
                            id="table_a",
                            data_in=table_a,
                            reset_a = reactive(input$reset_a)
  )

  #table b
  tbl_b_proxy <- callModule(module=mod_table_b,
                            id="table_b",
                            data_in=table_b,
                            reset_b = reactive(input$reset_b)
  )

  #table c
  callModule(module=mod_table_c,
             id="table_c",
             tbl_a_proxy,
             tbl_b_proxy
  )

}  


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

反应式闪亮模块共享数据 的相关文章

  • R Leaflet:添加多边形时传递 popupOptions。

    Within addPolygons 有一个popup参数就像addPopups 功能 区别 我认为 是当弹出窗口创建时addPolygons 可以单击多边形内的任意位置来触发弹出窗口 但是如果addPopups 被使用 单个lng and
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是
  • 在R闪亮中,如何在UI端使用在SERVER端计算的值?

    在我的 R闪亮应用程序中 我想调整我的高度d3heatmap 见包装d3热图 https cran r project org web packages d3heatmap index html 作为我的数据框行数的函数 有一个论点heig
  • RPostgreSQL 无法关闭连接

    我有一个闪亮的应用程序 使用它连接到数据库RPostgreSQL 在应用程序结束时 连接关闭 驱动程序应该被卸载 但我收到错误 警告我连接未关闭 代码看起来像这样 in the app R file but not in the serve
  • R(或替代方案?)中的高(或非常高)阶多项式回归

    我想对 R 中的一组数据进行 非常 高阶回归拟合 但是poly 函数的阶数极限为 25 对于此应用程序 我需要的订单范围为 100 到 120 model lt lm noisy y poly q 50 Error in poly q 50
  • modinfo srcversion:如何从我的源生成此版本?

    我有一个 Linux 模块的编译版本 然后我有大约 20 多个其源代码的变体 由于各种愚蠢的错误 我已经不知道哪个版本的源代码是我用来制作模块的实际版本了 我注意到modinfo
  • 矩阵中两个字符串的最大 nchar

    我想找到更好的方法来找到我正在相互比较的两个字符串的更大的 nchar 假设我有字符串句子匹配data frame 和我需要创建一个 max nchar string1 nchar string2 矩阵 但没有 for 循环 这是非常慢的方
  • R 中的聚类分析:确定最佳聚类数

    如何选择最佳的聚类数量来进行 k 均值分析 绘制以下数据的子集后 多少个簇比较合适 如何进行聚类树突分析 n 1000 kk 10 x1 runif kk y1 runif kk z1 runif kk x4 sample x1 lengt
  • 导入 python 模块的特殊性?

    我一直在使用 python 的 PySerial 库pyserial API http pyserial sourceforge net pyserial api html 我似乎无法理解为什么我必须专门导入模块的某个部分 这会给我一个错误
  • 如何使用 ggplot2 绘制 NA 间隙

    在 R 的基本绘图中 如果数据系列 ggplot2 中存在 NA 则会绘制间隙 举个例子看看 df data frame x c 1 10 y c 1 10 df 5 7 NA plot df type l 但是 ggplot2 删除了缺失
  • 使用反应式扩展按组缓冲,嵌套订阅

    我有一个事件源 它生成属于某些组的事件 我想缓冲这些组并将这些组 批量 发送到存储 到目前为止我有这个 eventSource GroupBy event gt event GroupingKey Select group gt new g
  • 指定生存图的自定义时间点

    我正在努力使用以下方法创建生存 累积事件图ggsurvplot函数从survminer包裹 我想为我的绘图指定自定义时间点 但我不知道该怎么做 这xlim and break x by参数有点帮助 但它们创建了均匀间隔的时间点和比我想要的更
  • R 抑制系统或 shell 命令的控制台输出

    我有这个 Windows 批处理文件 我使用 R 从 R 调用该文件shell 命令 该批处理文件执行一些计算并将它们写入磁盘上 也写入屏幕上 我只对磁盘输出感兴趣 我无法更改批处理文件 批处理文件可能有点愚蠢 例如 echo off ec
  • 为 Linux 安装 R 包时出错

    我试图在 R 3 3 上安装一个名为 rgeos 的包 但是当我输入 install packages rgeos 但它返回给我以下错误 其他包也会发生同样的情况 但不是所有包 gt installing source package rg
  • 用于不规则时间序列的滚动窗口函数,可以处理重复项

    我有以下数据框 grp nr yr 1 A 1 0 2009 2 A 2 0 2009 3 A 1 5 2009 4 A 1 0 2010 5 B 3 0 2009 6 B 2 0 2010 7 B NA 2011 8 C 3 0 2014
  • 双向条形图,两侧带有正标签ggplot2

    我尝试在 ggplot 中创建一个双向条形图 其中轴上方和下方的轴标签和数据标签均为正值 例如 如果您的数据是 myData lt data frame category c yes yes no no month c Jan Feb Ja
  • 在闪亮的应用程序中使用传单地图作为过滤器

    是否可以使用传单地图来过滤闪亮应用程序中的数据 就像在 Tableau 或 Power BI 中一样 方法是单击地图上的某个状态 然后根据条件过滤另一个图表或表格选择 None
  • ggplot() 使用scale::percent_format() 缩放产生奇怪的结果

    library tidyverse mtcars gt count cyl gt mutate prop n sum n gt ggplot aes x cyl y prop geom point scale y continuous la
  • 如何在主图区域之外的 ggplot2 中添加多个标题

    我想为页脚添加两个标题 但 ggplot 似乎只需要 1 是否有解决方法可以将注释或 geom text 添加到左下角和右下角 library ggplot2 p lt ggplot mtcars aes x wt y mpg geom p
  • R data.table fread 使用不带标题的命名 colClasses(例如没有 col.names?)

    更新 2016 年 6 月 col names 已添加到 data table 1 9 6 所以问题已经结束 每个人都非常高兴 我想我现在可以将所有 read csv 调用转换为 fread 调用 而不必担心破坏 原问题 使用数据表1 9

随机推荐

  • 在 Apache Spark (Scala) 中使用 reduceByKey

    我有一个类型为 用户 ID 名称 计数 的元组列表 例如 val x sc parallelize List a b 1 a b 1 c b 1 a d 1 我试图将这个集合简化为一种类型 其中每个 元素名称被计算在内 所以上面的 val
  • 在 Ruby 脚本中重定向 stdout 时出现问题

    我有以下测试 Ruby 脚本 require tempfile tempfile Tempfile new test stderr reopen tempfile stdout reopen tempfile puts test stdou
  • 使用特殊字符的 PHP 变量/函数/类名称

    我理解下划线 是命名变量 函数 类等的可接受字符 但是我想知道是否还有其他可以使用的特殊字符 我测试了一些 但没有运气 并且很长一段时间以来一直假设没有 但我想我会看看是否有其他人确切知道 这主要是出于美观的目的 但是我想在与其他开发人员合
  • 更新列表中的子项会更新 C# 中的所有项

    这是我的清单 public class PayRateDaysModel public string day name get set public List
  • 计算字段上的 SSRS 聚合

    我正在尝试对 SSRS 中的计算字段执行聚合 但收到以下错误 rsAggregateReportItemInBody textrun Textbox43 Paragraphs 0 TextRuns 0 的值表达式在报表项上使用聚合函数 聚合
  • Flask request.remote_addr 在 webfaction 上是错误的并且没有显示真实用户 IP

    我刚刚在 Webfaction 上部署了一个 Flask 应用程序 我注意到request remote addr总是127 0 0 1 这当然没有多大用处 如何在 Webfaction 上的 Flask 中获取用户的真实 IP 地址 Th
  • Firestore 文档的最大字段数?

    现在我有一个products我将产品存储为如下文档的集合 文档ID title STRING price NUMBER images ARRAY OF OBJECTS userImages ARRAY OF OBJECTS thumbnai
  • 未找到映射器类

    有时我的 MR 工作会抱怨找不到 MyMapper 类 我必须给 job setJarByClass MyMapper class 告诉它从我的 jar 文件加载它 cloudera cloudera vm tmp translator h
  • dmidecode 的 C/C++ API

    dmidecode列出了各种硬件参数 包括实际安装的 DRAM 模块的尺寸 型号和序列号 不使用system 并解析输出文本 是否有一个编程接口可以通过 C C 获取相同的信息 例如 dmidecode type 17 dmidecode
  • 在用户定义函数中创建、删除和插入临时表

    我正在尝试根据我的要求创建一个函数 但是 什么时候创建或删除 tempTable 它给出的错误为 在函数中无效使用副作用运算符 删除对象 我的理解是我们不能拥有create drop or insert操作于 temptable在一个函数中
  • 如何在iOS自动布局中动态更改字体大小?

    我想将我的文字放入UILabel 但对于不同的 iPhone 尺寸UILabel正在改变 因为我正在使用自动布局 但我无法修复字体大小 所以我的文本被剪掉了 有什么方法可以设置任何约束以使文本适合UILabel动态地 看到这里 由于屏幕分辨
  • 为什么 UserPrincipal.FindByIdentity 返回有关 GUID 为 32 位的错误?

    我的应用程序使用UserPrincipal类来确定用户属于哪些组 然后使用该信息来确定用户是否经过身份验证才能使用我的应用程序 有一段时间一切都很好 但最近我开始遇到异常 Guid 应包含 32 位数字和 4 个破折号 xxxxxxxx x
  • SQL 和 C# 中两个日期计算之间的日期差异产生不同的结果

    我正在计算两个日期的日差 在 C 中 diffdays EndDate StartDate Days 因此 考虑到结束日期为 6 26 2015 开始日期为 6 10 2015 diffdays 值为 15 如调试时的 自动 部分所示 在
  • 在 WordPress 中缓存自定义社交分享计数

    我真的很喜欢有一个股票柜台在我的博客文章上 我注意到它实际上鼓励访问者自己分享内容 因为没有真正令我满意的 WordPress sharecount 插件 其中大多数都需要大量调用 所以我自己编写了代码 它工作完美 但仍然减慢了我的网站速度
  • JavaScript - 我如何了解“闭包”的用法?

    维基百科 自由的百科全书 闭包 计算机科学 在计算机科学中 闭包是 在中评估的函数 环境包含一个或多个 绑定变量 当被调用时 函数可以访问这些变量 闭包的显式使用是 与函数式编程相关 以及诸如 ML 和 口齿不清 诸如以下对象的构造 其他语
  • 在 Electron 中处理表单的正确方法是什么?

    表单 html 和提交事件是 渲染器 的一部分 提交的数据应该在主流程中可用 提交表单并使数据可在 main js 中访问的正确方法是什么 我应该简单地使用 远程 模块将数据传递到 main js 中的函数还是有更好的方法 我们使用服务 A
  • MySql中如何使用触发器制作外键

    我想使用触发器在MySql中创建外键 我有以下表格 1 内容 表 教师 ID varchar 20 子 ID varchar 20 路径 varchar 100 文件名 varchar 100 2 老师 表 教师 ID varchar 20
  • 如何向我的班级用户表明验证要求?

    我正在实现一个类 该类使用非常严格定义的模式封装 xml 文档 我不控制架构 类中的属性之一用于模式指示必须与特定正则表达式匹配的元素值 在属性的设置器中 如果字符串与表达式不匹配 我将引发异常 我的问题是 如何才能更好地向我班级的用户传达
  • 如何将 Visual Studio 2019 中的 .NET 版本更改为 .NET Framework 4.7.2?

    我怎样才能将 NET更改为 NET Framework 4 7 2 我已经两天了 真的很挣扎 我正在做一个 WinFormApp 只能使用 NET 5 或 NET Core 3 1 但我需要 NET Framework 4 7 2 作为另一
  • 反应式闪亮模块共享数据

    我正在尝试使用模块创建一个闪亮的应用程序 两个数据帧 表 a 和 b 是反应性的并且可以修改 第三个数据帧 表 c 也是反应性的并且基于表 a 和 b 我尝试按照这个question https stackoverflow com ques