R Shiny:通过循环添加到绘图

2024-03-06

我正在尝试创建一个使用 Shiny 显示采样方式动画的应用程序。与所示示例类似的内容here http://onlinestatbook.com/stat_sim/sampling_dist/.

这是一些最小的代码,仅显示我遇到问题的部分。这不是我正在使用的数据,而是一个可重现的示例数据集。

library(shiny)
library(ggplot2)

data <- data.frame(ID=1:60, 
                   x=sort(runif(n = 60)), 
                   y=sort(runif(n = 60)+rnorm(60)))

ui <- fluidPage(
    sidebarPanel(
        sliderInput("n",
                    "Number of samples:",
                    min = 10,
                    max = 100,
                    value = 20),

        sliderInput("surveys",
                    "Number of surveys:",
                    min = 10,
                    max = 100,
                    value = 20),

        checkboxInput("replacement", 
                      "Sample with replacement?"),

        actionButton("button", "Go!")
    ),
    # Show the plot
    mainPanel(
        plotOutput("plot1")
    )
)

server <- function(input, output) {
    output$plot1 <- renderPlot({
        plot1 <- ggplot(data, aes(x=x, y=y)) + geom_point(colour="red") + theme_bw()
        plot1 <- plot1 + geom_vline(xintercept = mean(data$x), size=1.1, colour="red")
        plot1

        for(i in 1:20){
            data$sampled <- "red"
            sample.rows <- sample(data$ID, 20, replace = F)
            data$sampled[sample.rows] <- "green"

            plot1 <- plot1 + geom_point(x=data$x, y=data$y, colour=data$sampled, size=2)

            sample.mean.x <- mean(data$x[sample.rows])

            plot1 <- plot1 + geom_vline(xintercept = sample.mean.x, colour="green")

            print(plot1)
            Sys.sleep(1.5)
        }
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

里面的部分renderPlot({ ... })当粘贴到控制台时,它正是我想要的,但是如何在 Shiny 中实现这一点呢?理想情况下,我还希望首先出现情节,然后在actionButton被点击。

Thanks!


您可以使用reactiveTimer要做到这一点。我修改了您代码的服务器部分。在下面的代码中,我将计时器设置为两秒,以便绘图每两秒更新一次。

  server <- function(input, output) {

    autoInvalidate <- reactiveTimer(2000)
    plot1 <- NULL

    output$plot1 <- renderPlot({
      plot1 <<- ggplot(data, aes(x=x, y=y)) + geom_point(colour="red") + theme_bw()
      plot1 <<- plot1 + geom_vline(xintercept = mean(data$x), size=1.1, colour="red")
      plot1
    })

    observeEvent(input$button,{

      output$plot1 <- renderPlot({
        autoInvalidate()
        data$sampled <- "red"
        sample.rows <- sample(data$ID, 20, replace = F)
        data$sampled[sample.rows] <- "green"

        plot1 <<- plot1 + geom_point(x=data$x, y=data$y, colour=data$sampled, size=2)

        sample.mean.x <- mean(data$x[sample.rows])

        plot1 <<- plot1 + geom_vline(xintercept = sample.mean.x, colour="green")

        plot1

      })
    })
  }

[EDIT]:

由于您希望循环只运行 20 次,我在答案的帮助下修改了代码this https://stackoverflow.com/a/43251477/5894457链接,以便反应式计时器仅运行到计数为 20 为止。以下是您需要从链接添加的代码:

  invalidateLaterNew <- function (millis, session = getDefaultReactiveDomain(), update = TRUE) 
  {
    if(update){
      ctx <- shiny:::.getReactiveEnvironment()$currentContext()
      shiny:::timerCallbacks$schedule(millis, function() {
        if (!is.null(session) && session$isClosed()) {
          return(invisible())
        }
        ctx$invalidate()
      })
      invisible()
    }
  }

  unlockBinding("invalidateLater", as.environment("package:shiny"))
  assign("invalidateLater", invalidateLaterNew, "package:shiny")

这是它的服务器代码:

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

count = 0
plot1 <- NULL


  output$plot1 <- renderPlot({
    plot1 <<- ggplot(data, aes(x=x, y=y)) + geom_point(colour="red") + theme_bw()
    plot1 <<- plot1 + geom_vline(xintercept = mean(data$x), size=1.1, colour="red")
    plot1
  })

observeEvent(input$button,{
 count <<- 0
  output$plot1 <- renderPlot({

    count <<- count+1
    invalidateLater(1500, session,  count < 20)
    data$sampled <- "red"
    sample.rows <- sample(data$ID, 20, replace = F)
    data$sampled[sample.rows] <- "green"

    plot1 <<- plot1 + geom_point(x=data$x, y=data$y, colour=data$sampled, size=2)

    sample.mean.x <- mean(data$x[sample.rows])

    plot1 <<- plot1 + geom_vline(xintercept = sample.mean.x, colour="green")

    plot1

  })
})


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

R Shiny:通过循环添加到绘图 的相关文章

  • LaTex 中与 knit 和 xtable 交叉引用的问题

    我目前正在与 R Studio 合作 使用 LaTex 中的 R knitr 生成 PDF 文档 在这些文档中 我想在文本中引用的表格中展示我的部分结果 我使用 R 中的 xtable 包生成这些表 它运行良好并为我提供了正确的表 到目前为
  • 如何获得 STAN 中最大似然估计的标准误差?

    我在 Stan 中使用最大似然优化 但不幸的是optimizing 函数不报告标准错误 gt MLb4c lt optimizing get stanmodel fitb4c data win data init inits STAN OP
  • 如何在R中计算文本中的句子数?

    我使用 R 将文本读入readChar 功能 我的目的是测试文本句子中字母 a 出现次数与字母 b 出现次数一样多的假设 我最近发现了 stringr 包 它帮助我对文本做很多有用的事情 例如计算字符数以及整个文本中每个字母出现的总数 现在
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 将 Instagram/youtube 嵌入 Shiny R 应用程序

    我想通过点击图表来播放 Instagram 或 Youtube 视频 例如显示异常值等 到目前为止 明确告诉 Shiny 视频内容是有效的 require shiny require ggplot2 data df lt data fram
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 在 R 中创建一个运行计数变量?

    我有一个足球比赛结果的数据集 我希望通过创建一组类似于世界足球 Elo 公式的运行评级来学习 R 我遇到了麻烦 在 Excel 中看似简单的事情在 R 中并不完全直观 例如 4270 个观察中的前 15 个具有必要的变量 date t 1
  • 如何删除箱线图上的刻度线

    我试图从箱线图中删除 x 轴刻度线 但保留与刻度线关联的标签 这在基础 R 中可能吗 colors lt c lightskyblue3 gray78 gold1 wheat1 boxplot avgscore module data mi
  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab
  • 将绘图调用拆分为多个块

    我正在编写一个图的解释 其中我基本上将在第一个块中创建图 然后描述该输出 并在第二个块中添加一个轴 然而 似乎每个块都会强制一个新的绘图环境 因此当我们尝试使用以下命令运行块时会出现错误axis独自的 观察 output html docu
  • Dendextend:关于如何根据定义的组为树状图的标签着色

    我正在尝试使用一个名为 dendextend 的很棒的 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色 我已阅读您在 Stack Overflow 中的答案以及 dendextend vignette 的常见问题解答 但我仍然不
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 将阴影区域添加到五分位数之间的直方图中

    All 我有一个包含 2 个直方图的图表 其中我还绘制了代表第 20 40 60 和 80 个百分位数的线条 下面的代码使用虚拟数据重现了类似的图表 data lt rbind data frame x rnorm 1000 0 1 g o
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集

随机推荐

  • “环境变量 PYSIDE_DESIGNER_PLUGINS 未设置,正在退出。”

    我已经安装了开源 qt Creator 免费版本 并创建了非常简单的桌面应用程序 我能够创建简单的窗口 但是当我运行时 出现以下错误 我尝试关注此页面 但无法理解如何解决此问题 https www qt io blog qt for pyt
  • PHP:查询电子邮件是否唯一,如果是,则查询以将记录添加到数据库

    我没有经验 所以感谢任何帮助 我希望构建一个 PHP 来确认用户注册具有唯一的电子邮件地址 如果唯一 则添加到sql数据库 并回显各自的值 这就是我所拥有的 如果电子邮件地址重复 则会生成回显值 但如果电子邮件地址是唯一的 则不会生成回显值
  • StrictMode 策略违规:android.os.StrictMode$StrictModeDiskReadViolation:应用程序 super.onCreate 处的策略 = 327711 违规 = 2

    当我打开严格模式检测全部时 我的应用程序崩溃了应用程序的 super onCreate 即 在我让任何代码执行任何操作之前 我的应用程序 onCreate 打开严格模式如下 override fun onCreate if BuildCon
  • 使用 SearchView 延迟调用 SearchView.OnQueryTextListener 中的 onQueryTextChange()

    Using a SearchView在我的应用程序中 无论如何 我可以延迟对 onQueryTextChange 方法的调用 例如 当用户键入字符序列时 他必须等待此方法被调用 这个等待应该not取决于已输入的字符数 但在调用方法之前需要短

  • 替换为前标记之间的新行

    我想转换 p Code is following p pre lt html gt br lt html gt pre to p Code is following p pre lt html gt lt html gt pre 我不知道如
  • 为什么 System.IO.File.Exists(string path) 返回 false?

    System IO File Exists string path 即使文件存在于指定路径上 也始终返回 false 可能的解决方案是什么 这很可能是一个权限问题 来自文档 http msdn microsoft com en us lib
  • 给定 3D 空间中的 N 个点,如何找到包含这 N 个点的最小球体?

    给定 3D 空间中的 N 个点 如何找到包含这 N 个点的最小球体 这个问题称为最小包围球问题 谷歌这个术语可以找到相关的教程和论文 这是一种实现 http www inf ethz ch personal gaertner minibal
  • 自定义 OpenFileDialog

    我正在用 C 开发 winforms 应用程序 我想要实现的是从用户那里获取一个文件 我正在使用以下代码 OpenFileDialog dlg new OpenFileDialog if dlg ShowDialog DialogResul
  • 是否可以从(函子成员的)函数签名中检索参数类型以在模板中使用?

    假设你有一个函子 struct MyFunctor bool operator int value return true 是否可以检索函子的成员参数类型以在模板中使用 以下是这个神话功能的使用 template lt typename F
  • android - 连接时套接字超时

    我正在尝试在 Android 上实现 tcp 客户端应用程序 当我尝试连接到 C 服务器时 套接字在尝试连接到服务器时超时 My code new Thread new ClientThread start try PrintWriter
  • 从字符数组更改为字符串时出现“字符串下标超出范围”错误?

    我开始使用字符串代替字符数组 当我将大小为 5 定义的字符数组之一更改为字符串时遇到错误 我在尝试运行程序时得到的错误是 表达式 字符串下标超出范围 newWord 最初是一个字符数组 但将其更改为字符串后 我收到此错误 我不明白是什么原因
  • 为什么这个补码捷径有效?

    形成二进制数的补码的一种捷径方法是从右侧复制位 直到复制了一位 然后对剩余位求补 反转 这在SO上有解释here https stackoverflow com questions 33592801 converting binary to
  • 如何获取字符串中可能重叠的匹配项

    我正在寻找一种方法 无论是在 Ruby 还是 Javascript 中 它都能为我提供字符串中与正则表达式匹配的所有匹配项 可能重叠 假设我有str abcadc 我想找到出现的a后跟任意数量的字符 后跟c 我正在寻找的结果是 abc ad
  • 根据其他常数定义一个常数

    很抱歉 如果这个问题看起来很幼稚 但我无法在任何地方找到明确的答案 我必须根据先前定义的常量定义一个常量 例如 define CONST A 2 define CONST B 3 define CONST C CONST A CONST B
  • PHP die() 清理所有页面

    一道php die函数问题 当我使用 die 时 它会清除所有页面元素 有什么方法可以回显错误消息而不清理所有页面 当我使用 die 停止代码并调出消息时 它看起来像是跳转到另一个页面 这是我的代码
  • 平凡的析构函数会导致别名吗

    C 11 3 8 1 声明 对于具有简单析构函数的对象 我可以通过分配其存储来结束其生命周期 我想知道微不足道的析构函数是否可以延长对象的生命周期 并通过 销毁一个我更早结束生命周期的对象 来导致别名问题 首先 我知道一些东西是安全且无别名
  • 在 VS Code 中调试时观察窗口或计算表达式?

    我很喜欢视觉工作室代码 https code visualstudio com 它是一个很棒的编辑器 但在调试 Node 应用程序时有一件事确实让我烦恼 我看不到任何类型的监视窗口或在调试时评估表达式的能力 这使得调试非常痛苦 我正在考虑回
  • 天蓝色通知中心 - 应用程序卸载

    我想使用 Azure 通知中心向跨 iOS Android 和 Windows Phone 运行我的应用程序的用户发送推送通知 我已经成功地完成了基础工作 但我不知道如何管理应用程序卸载故事 启动时 移动应用程序将调用我的 Identity
  • 是否可以手动销毁SurfaceView?

    即使调用活动的 onPause 我的 SurfaceView 也不会被破坏 我正在处理中的线程 public void surfaceCreated SurfaceHolder holder if mGameThread getState
  • R Shiny:通过循环添加到绘图

    我正在尝试创建一个使用 Shiny 显示采样方式动画的应用程序 与所示示例类似的内容here http onlinestatbook com stat sim sampling dist 这是一些最小的代码 仅显示我遇到问题的部分 这不是我