Shiny - 在输出中使用观察函数调用的结果

2023-11-22

我有一个闪亮的应用程序,其中基于所选选项(列)数据集动态重新计算。重新计算的结果用于向用户显示另一组选项并创建绘图。

目前我正在使用observe()读取用户选择、重新计算数据集并更新 UI。但是,当显示输出(图)时,我必须再次重新计算,因为observe()不返回任何内容。

有没有办法只重新计算一次数据集?

我创建了简单的example为了说明这一点:

library(devtools)
library(shiny)
runGist('7333949') 

In server.R我想要一次调用自定义函数AggregateData in observe()并且没有来电renderUI().

应用程序代码:

服务器.R:

# shiny server side code for each call
shinyServer(function(input, output, session){
     #update variable and group based on dataset
     observe({

          require(sqldf)

          if (is.null(input$source_columns)) {
               obj <-TestData
          } else {
               obj<-AggregateData(TestData,Columns=input$source_columns)
          }

          var.opts<-namel(colnames(obj))
          var.opts.original.slicers <- namel(colnames(TestData))           
          measures <- c('m1','m2','m3','m4','m5')

          var.opts.slicers <- var.opts[!(var.opts %in% c(measures,'x'))]
          var.opts.original.slicers <- var.opts.original.slicers[!(var.opts.original.slicers %in% c(measures,'x'))]
          var.opts.measures <- var.opts[var.opts %in% measures]

          updateSelectInput(session, "source_columns", choices = var.opts.original.slicers, selected=var.opts.slicers)
          updateSelectInput(session, "xaxis", choices = var.opts.slicers,selected="x")
          updateSelectInput(session, "yaxis", choices = var.opts.measures,selected="m1")

     })

     output$plot <- renderUI({
          plotOutput("p")
     })

     #plotting function using ggplot2

     output$p <- renderPlot({
          require(ggplot2)
          obj <- AggregateData(TestData,Columns=input$source_columns)
          p <- PlotData(obj,x=input$xaxis, y=input$yaxis)
          print(p)
     })     
})

ui.R:

shinyUI(pageWithSidebar(
     # title
     headerPanel("Analysis setup"),

     #input
     sidebarPanel
     (
          selectInput("source_columns","Source Columns:", "Loading...",multiple=TRUE),
          selectInput("xaxis","X Axis:", "Loading..."),
          selectInput("yaxis","Y Axis:", "Loading...")
     ),     

     # output               
     mainPanel(
          #h3('Vintage Analysis'),
          uiOutput("plot") # depends on input 
     )
))

全局.R:

#initialize
library(ggplot2) 

TestData <- data.frame(   a = rep(LETTERS[1:4],10),
                          b = rep(c('A','B'),20),
                          c = rep(LETTERS[1:5],each=8),
                          d = rep(c('A','B'),2,each=10),
                          m1 = rnorm(40),
                          m2 = rnorm(40),
                          m3 = rnorm(40),
                          m4 = rnorm(40),
                          m5 = rnorm(40),
                          x  = rep(1:5,each=8)
)

#helper function (convert vector to named list)
namel<-function (vec){
     tmp<-as.list(vec)
     names(tmp)<-as.character(unlist(vec))
     tmp
}

# Function to aggregate data based on selected columns (Source Columns)
AggregateData <- function(data,Columns=NA) {

     require(sqldf)
     if (all(is.na(Columns))) {
          sql <- "select 
                    sum(m1) as m1, sum(m2) as m2, sum(m3) as m3, sum(m4) as m4, sum(m5) as m5, x
                 from TestData group by x" 
          sqldf(sql)                
     } else {
          sql <- paste("select ", paste(Columns, collapse =','), ",
                    sum(m1) as m1, sum(m2) as m2, sum(m3) as m3, sum(m4) as m4, sum(m5) as m5, x
                 from TestData group by ",paste(Columns, collapse =','),", x")
          sqldf(sql)          
     }
}

# Function to plot data
PlotData <- function(data,x="x",y="m1") { 
     ggplot(data, aes_string(x=x, y=y)) + geom_line()
}

Use reactiveValues():

shinyServer(function(input, output, session){
     #update variable and group based on dataset

     values <- reactiveValues()

     observe({

          require(sqldf)

          if (is.null(input$source_columns)) {
               values$obj <-TestData
          } else {
               values$obj<-AggregateData(TestData,Columns=input$source_columns)
          }
             ...
     })

     output$plot <- renderUI({
          plotOutput("p")
     })

     #plotting function using ggplot2

     output$p <- renderPlot({
          require(ggplot2)
          obj <- values$obj
          p <- PlotData(obj,x=input$xaxis, y=input$yaxis)
          print(p)
     })     
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shiny - 在输出中使用观察函数调用的结果 的相关文章

  • 在 Shiny 中设置一个绘图缩放以匹配另一个绘图缩放

    我正在尝试使用情节重排获取一个图的 x 轴缩放限制 并将它们应用到 Shiny 中的另一个图 到目前为止 我可以从 plot1 x轴限制 获取相关的plotly relayout数据 将其转换 从数字到日期 并在绘制 plot2 之前将其提
  • R - 正则表达式错误(PCRE 版本)

    我正在尝试使用koRpus在 R 中在运行 RHEL6 的 Linux 服务器上进行词形还原 上周 当我安装了 MRO Microsoft R Open 3 2 3 时 下面的代码效果很好 library koRpus lw c danci
  • 将密度曲线拟合到 R 中的直方图

    R中有没有可以将曲线拟合到直方图的函数 假设您有以下直方图 hist c rep 65 times 5 rep 25 times 5 rep 35 times 10 rep 45 times 4 看上去很正常 但其实是歪曲的 我想拟合一条倾
  • dplyr 中的 Summarize 是否可以不删除数据框中的其他列?

    我有一个包含三列的数据框 我正在尝试进行简单的总结以查找数据框中每个城市的最高温度 但同时保留每个最高温度列出的日期 这是数据框 我们称之为 maxT new ID Date Max TemperatureF 1 TUS 1960 04 0
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • 如何更新条件公式?

    让我直接进入示例 考虑以下等式 frml lt formula y a b x z 使用这样的公式规范 例如和AER ivreg 我想更新这个公式 使其显示为 frml2 lt y a b c x z w 但是 我不确定如何更新条件标志之前
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • 将 VLMC 拟合到很长的序列

    我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集 我这样做如下所示 Load libraries library PST library RCurl library TraMineR Load and transform d
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • R 编程:如何计算数据框中两个单元格之间的差异并将它们保存在新列中

    尝试学习 R 并陷入自相关示例中 我想将 x 的差异与 y 的差异进行回归 我在数据框中有 x 和 y 并且希望将 x2 x1 的差值保存在新列 例如 dx 中 我不知道该怎么做 我拥有的 data1 x y 5 3 8 9 3 1 1 5
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • 表单提交时出现 rvest 错误

    我想从以下网页中抓取数据 https swgoh gg u zozo collection 180 emperor palpatine https swgoh gg u zozo collection 180 emperor palpati
  • 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、tidyverse 和 broom 的相关矩阵 - P 值矩阵

    全部 我想使用以下方法从相关矩阵中获取 p 值dplyr 和 或扫帚包 并同时测试多个变量 我知道其他方法 但 dplyr 对我来说似乎更简单 更直观 此外 dplyr 需要关联每个变量以获得特定的 p 值 这使得该过程更容易 更快 我检查
  • 如何将 ggrough 图表另存为 .png

    说我正在使用R包裹ggrough https xvrdm github io ggrough https xvrdm github io ggrough 我有这个代码 取自该网页 library ggplot2 library ggroug

随机推荐

  • 在 Excel 2019 中应用 IRibbonUI.ActivateTab

    我有现有的 VBA 代码 我的 在 Excel 2010 中工作 可激活自定义功能区选项卡 IRibbonUIObjectName ActivateTab tabID 该代码作为子程序中的标准操作存在 用于处理活动窗口的更改 在相关时激活选
  • Node.js setInterval() 在 25 天后停止执行

    在我的 Node js 应用程序中 我使用setInterval 每 1 小时运行一次特定功能 该函数正常执行大约 25 天 然后计时器停止触发 25 天似乎非常接近 Node js 的时间TIMEOUT MAX 2 31 毫秒 25 天
  • ASP.net MVC 中的自定义表单身份验证/授权方案

    我正在尝试使用表单身份验证在 ASP NET MVC 中创建自定义身份验证方案 我的想法是 我可能会在网站上有不同的区域进行管理 批准者区域和一般用户区域 并且这些区域将使用不同的登录页面 等等 这就是我想要发生的事情 用户访问受限页面 现
  • 仅显示 UIView 的角点

    如何只显示 UIView 的角点 let view UIView view layer borderColor UIColor white cgColor view layer borderWidth 2 let maskframe UIV
  • Firebase Cloud Function 已完成,状态为:“响应错误”

    我有一个云函数 它返回大量数据 50 000 个文档 作为对象 当我运行它时 我收到错误finished with status response error 仅当我导出所有数据时才会发生这种情况 当应用限制 最多 20 000 时 它可以
  • Swift 中的dispatch_once 示例

    有没有例子说明如何调度一次应该在 Swift 中使用吗 最好是苹果公司的 注意 在这种情况下 我不将其用于单例 我想运行任意代码一次 Update 我主要对在实例方法中使用此方法时推荐的约定感兴趣 但为了完整性起见 在类方法 函数和全局上下
  • 应用程序报告需要很长时间才能更新

    应用程序报告和电源管理报告需要大量时间来刷新 我注意到我的设备电池电量为 88 但在电源管理报告中电池电量仍然为 40 此外 当我更新设备上的应用程序时 应用程序报告花了很多时间才能获取更新的版本代码 有什么方法可以从设备获取最新报告吗 我
  • 从 scapy 数据包中获取信息字符串

    我在我正在构建的工具中以非交互方式 即作为库 使用 scapy 2 3 1 dev 我想获取有关数据包的一串人类可读的信息 例如您从scapy all Packet show 我尝试过使用所有三种方法 packet show packet
  • SQL Server BCP:如何在所有字段周围加引号?

    我有这个 BCP 命令 bcp DBName vieter out c test003 txt c T t S SERVER 我得到的输出 CSV 不会在字段名称周围加上引号 而是将其放在逗号周围 我怎样才能得到 t 在所有字段周围加上引号
  • Java:从日期获取月份整数

    如何从 Date 对象中获取整数月份 java util Date java util Date date new Date Calendar cal Calendar getInstance cal setTime date int mo
  • 如何从 Tkinter 窗口立即停止 Python 进程?

    我有一个 Python GUI 用来测试我工作的各个方面 目前我有一个 停止 按钮 可以在每个测试结束时终止进程 可以设置多个测试同时运行 但是 有些测试需要很长时间才能运行 如果我需要停止测试 我希望它立即停止 我的想法是使用 impor
  • scrapy使用CrawlerProcess.crawl()从脚本将custom_settings传递给spider

    我正在尝试通过脚本以编程方式调用蜘蛛 我无法使用 CrawlerProcess 通过构造函数覆盖设置 让我用默认的蜘蛛来说明这一点 用于从官方 scrapy 网站抓取引号 最后一个代码片段位于官方 scrapy 引用示例蜘蛛 class Q
  • 导出类的公共属性在 TypeScript 中使用私有类型错误

    C dev OpenCMS Website Frontend Scripts libs sinnovations gt tsc sinnovations listv iewbase ts module amd C dev OpenCMS W
  • 如何将 Enter 键绑定到 tkinter 按钮

    我正在尝试绑定回车键 with a button 在下面的代码中 我试图从条目小部件中获取条目 当按钮bt被按下 它调用enter 获取条目的方法 我还希望通过按回车键 我没有得到想要的结果 在条目小部件中输入的值不会被读取 并且enter
  • 如何在 Kubernetes 中从工作节点找到主节点

    我需要知道我当前的工作节点连接到哪个主节点 我可以通过在主节点中输入 kubectl getnodes 命令来查看工作节点 但我需要从工作节点本身找到主节点 简单来说 kubernetes集群中如何从worker节点找到master节点 您
  • 如何记录 Spring Data JPA 存储库方法的执行时间?

    我有简单的 Spring Data JPA 存储库 public interface UserRepository extends JpaRepository
  • C# 中的匿名类型

    x is compiled as an int var x 10 y is compiled as a string var y Hello z is compiled as int var z new 0 1 2 but ano is c
  • Rails Mongoid 无法进行身份验证 - 失败并出现错误 13:“未授权对 my_db.my_collection 进行查询”

    这个问题据说最新版本的Moped已经解决了 但我仍然遇到这种情况 我有一个 Rails 4 2 应用程序Mongoid 为 MongoDB 数据库创建了一个用户读写 and dbOwner角色 并设置授权 真 in the mong con
  • MPAndroidChart LineChart:使用日期而不是字符串作为 X 轴

    MPAndroid图表折线图默认情况下接受 X 轴字符串 有没有办法将日期设置为 X 轴的数据类型 仅将日期转换为字符串的问题是图表可能会根据数据点而倾斜 例如 如果我在 1 月份有一个数据条目 在 6 月份有 10 个数据条目 则默认情况
  • Shiny - 在输出中使用观察函数调用的结果

    我有一个闪亮的应用程序 其中基于所选选项 列 数据集动态重新计算 重新计算的结果用于向用户显示另一组选项并创建绘图 目前我正在使用observe 读取用户选择 重新计算数据集并更新 UI 但是 当显示输出 图 时 我必须再次重新计算 因为o