r闪亮:在ui.R中创建小部件与renderUI + uiOutput

2023-11-26

我的问题更多地属于“最佳实践”类型的询问。使用时shiny封装在r,是否最好在server侧面使用renderUI然后将它们推向ui via uiOutput?或者,如果可能的话,所有小部件都应该在ui side?

例如,下面的两个应用程序执行相同的操作,但在第二个应用程序中,我创建了sliderInput on the server一边,然后将其推到ui而不是在中创建它ui边。 (注意,此代码是从你好闪亮R Studio 页面)

应用程序 1 - “标准方法”在中创建小部件ui

#ui.R

# Define UI for application that plots random distributions 
library(shiny)
ui1 <- shinyUI(fluidPage(

    # Application title
    titlePanel("Hello Shiny!"),

    # Sidebar with a slider input for number of observations
    sidebarLayout(
        sidebarPanel(
            sliderInput("obs", 
                        "Number of observations:", 
                        min = 1, 
                        max = 1000, 
                        value = 500)
        ),

        # Show a plot of the generated distribution
        mainPanel(
            plotOutput("distPlot")
        )
    )
))

#server.R

# Define server logic required to generate and plot a random distribution
library(shiny)
server1 <- (function(input, output) {

    output$distPlot <- renderPlot({

        # generate an rnorm distribution and plot it
        dist <- rnorm(input$obs)
        hist(dist)
    })

})

runApp(shinyApp(ui = ui1, server = server1))

应用程序 2 - 替代方法 - 创建小部件server side

#ui.R

# Define UI for application that plots random distributions 
library(shiny)
ui2 <- shinyUI(fluidPage(

    # Application title
    titlePanel("Hello Shiny!"),

    # slider comes from the si object created in server.R
    sidebarLayout(
        sidebarPanel(
            uiOutput("si")
        ),

        # Show a plot of the generated distribution
        mainPanel(
            plotOutput("distPlot")
        )
    )
))

#server.R

# Define server logic required to generate and plot a random distribution
library(shiny)
server2 <- (function(input, output) {

    #create slider with renderUI
    output$si <- renderUI(
        sliderInput("obs", 
                    "Number of observations:", 
                    min = 1, 
                    max = 1000, 
                    value = 500)
    )

    output$distPlot <- renderPlot({

        # generate an rnorm distribution and plot it
        dist <- rnorm(input$obs)
        hist(dist)
    })

})

runApp(shinyApp(ui = ui2, server = server2))

对我来说,第二种方法更通用,所以它应该获胜。但是,我不是专家,我很少看到使用这种方法,除非有特定原因需要小部件以某种方式响应。我要求响应能力的方式包括:

  • 上有数据加载server最终供给小部件的一侧choices所以最好只加载一次数据server并在那里创建小部件,而不是将其加载到server and ui side.
  • 我们需要关闭/打开小部件和/或允许它们对其他用户输入做出反应

由于我提出的第二种方法可以处理上述两个选项,因此对我来说,它应该在所有情况下使用,即使没有真正需要在server边。我注意到,使用第二种方法时,会出现延迟,有时在加载小部件之前会出现警告/错误。这是我注意到该方法的唯一缺点。

这些方法之一是否被视为“最佳实践”?

Thanks.


None

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

r闪亮:在ui.R中创建小部件与renderUI + uiOutput 的相关文章

  • 使用 R Markdown 文档作为函数源

    我正在研究 R Markdown 来记录我经常使用的功能 我会将它们放入 R Markdown 文件中以记录它们 然后如果我几个月后回来查看它 就能够阅读我在函数背后的想法 我的问题是 如果我开始一个新的 R 项目 是否可以获取 r mar
  • 构造奎因(自我复制功能)

    有没有人构建过 quine 生成自己源文本的副本作为其完整输出的程序 http www nyx net gthompso quine htm http www nyx net gthompso quine htm 在 R 中 quine 标
  • R 3.5 - read.csv 无法读取 UTF-16 csv 文件

    我的代码如下 read csv http asic gov au Reports YTD 2018 RR20180420 001 SSDailyYTD csv skip 1 fileEncoding UTF 16 sep t header
  • 如何对范围内的行进行分组并考虑第三列?

    我有一个遗传数据集 我想对基因组中物理上靠近的遗传变异 行进行分组 我想对每条染色体基因组中某些点范围内的基因进行分组 chrom 我的 点 数据集包含变体 行需要在一定范围内的位置 如下所示 chrom low high 1 500 17
  • ggplot2 + 使用比例 X 的日期结构

    我真的需要帮助 因为我已经迷路了 我正在尝试创建一个折线图 显示几个团队一年来的表现 我将一年分为几个季度 2012 年 1 月 1 日 2012 年 4 月 1 日 2012 年 8 月 1 日 12 1 12 并将 csv 数据帧加载到
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng
  • 从 leafletProxy() 返回渲染的传单地图

    是否可以在渲染后在 Shiny 中检索传单地图 下面是一个代码示例 展示了如何生成地图leaflet 与返回的不同leafletProxy 即使它们在渲染时看起来完全相同 是否有一个功能可能不同于leafletProxy 获取实际的 htm
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • R 中舍入到下一个数量级的算法

    如果标题不清楚 我很抱歉 但我无法简洁地解释它 给定一个浓度向量 我想将最大值四舍五入到下一个数量级 即 345 到 1000 另外 我想将最小值四舍五入到较低的数量级 即 3 2 到 1 这些浓度也可能低于 1 因此例如 0 034 需要
  • 在 R 中计算大矩阵的零空间

    我找不到任何函数或包来计算 a 的零空间或 QR 分解 bigmatrix from library bigmemory 在 R 中 例如 library bigmemory a lt big matrix 1000000 1000 typ
  • e_facet 在 echarts4r 问题中使用分组数据

    我真的很喜欢这个包提供的可能性 并且想在一个闪亮的应用程序中使用它 然而我正在努力重新创建从 ggplot 到 echarts4r 的情节 library tidyverse library echarts4r data tibble ti
  • 如何比较数据框1的每一行与数据框2的每一行?

    我有两个数据框 如下所示 x data frame Name c 200003 200260 400826 400863 500710 Chr c chr1 chr1 chr2 chr3 chr3 Position c 11880 1441
  • 如何自动替换多个文件的文本内容中的字符?

    我有一个文件夹 myfolder包含许多乳胶表 我需要替换其中每个字符 即替换任何minus sign by an en dash 只是为了确定 我们正在替换连字符INSIDE该文件夹中的所有 tex 文件 我不关心 tex 文件名 手动执
  • R 中 optim() 的优化(L-BFGS-B 需要“fn”的有限值)

    我在 R 中使用 optim 来求解涉及积分的可能性时遇到一些问题 我收到一条错误消息 optim par c 0 1 0 1 LLL method L BFGS B lower c 0 L BFGS B 需要 fn 的有限值 中的错误 下
  • “x[] <- as.integer(x)”是什么意思

    当我阅读 R 手册时 我遇到了如下代码行 从 R 手册中的 colSums 复制 x lt cbind x1 3 x2 c 4 1 2 5 dimnames x 1 lt letters 1 8 x lt as integer x 有人能告
  • ggplot2 方面的内部排序

    我正在尝试在 ggplot2 中绘制一个方面 但我很难使不同方面的内部顺序正确 数据如下 head THAT EXT ID FILE GENRE NODE 1 CKC 1823 01 CKC Novels better 2 CKC 1824
  • R 中的 aov() 错误术语:bw Error(id) 和 Error(id/timevar) 规范有什么区别?

    两者有什么区别aov depvar timevar Error id 和aov depvar timevar Error id timevar 配方规格 这两种变体产生略有不同的结果 同样的问题曾经在这里被问过 https stats st
  • 在并行包中的 R 的 par*apply 函数内部使用 Rcpp 函数

    我试图了解背后发生的事情Rcpp sourceCpp 调用并行环境 最近 问题中部分解决了这个问题 在 Windows 上使用 parLapply 中的 Rcpp 函数 https stackoverflow com questions 2
  • 将 R 中的列中的单引号替换为双引号

    我在 R 中的数据框有一个 A 列 其中有带单引号的字符串数据 Column A Hello World Hi World Good morning world 我想做的是将单引号替换为双引号并实现如下所示的输出 Column A Hell

随机推荐