闪亮的模块:在创建模块 UI 时已经存储参数(附加参数),而不是将其传递给模块的服务器函数?

2024-02-29

我创建了一个模块sliderCheckbox它捆绑在一起sliderInput and a checkBoxInput禁用 sliderInput - 基本上可以声明“我不知道”,这对于类似调查的输入是必要的。当滑块被禁用时,我希望它返回一个默认值 - 最常见的是初始值,但不一定。

现在我的问题是:初始化 UI 时是否有可能传递此默认值,即sliderCheckboxInput()?由于默认值是像最小值和最大值这样的属性,这就是它逻辑上所属的位置,并且它也更适合我的设置的其余部分。

例子:

library(shiny)
library(shinyjs)

sliderCheckboxInput <- function(id,description="",
                                min = 0,
                                max = 100,
                                value = 30,
                                default= NULL ##HERE I would want the default value to be set
                                cb_title = "I don't know"){
  ns <- NS(id)

  fluidRow(
    column(width=9,
           sliderInput(ns("sl"),
                       paste0(description, collapse=""),
                       min = min,
                       max = max,
                       value = value)
    ),
    column(width=2,
           checkboxInput(ns("active"),
                         cb_title, value=FALSE )
    )
  )
}

sliderCheckbox<- function(input, output, session,
                          default=NA) { #Problem: set default when initialising module

  oldvalue<- reactiveVal()

  observeEvent(input$active, {
    if (input$active){
      oldvalue(input$sl)
      disable("sl")
      updateSliderInput(session, "sl", value=default)
    }else {
      updateSliderInput(session, "sl", value=oldvalue())
      enable("sl")
    }

    toggleState("sl", !input$active)
  })

  onclick("sl",
          if(input$active) updateCheckboxInput(session, "active", value=FALSE)
  )

  return ( reactive({
    if (input$active){
      default
    }else {
      input$sl
    }
  }))

}


ui <- fluidPage(

  useShinyjs(),

  # Sidebar with a slider input for number of bins
  sidebarLayout(
    sidebarPanel(
      sliderCheckboxInput("bins", "Number of bins:",
                          min = 1,
                          max = 50,
                          value = 30)
    ),

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

server <- function(input, output, session) {
  bins_nr <- callModule(sliderCheckbox, "bins", default=44)

  output$distPlot <- renderPlot({

    # generate bins based on input$bins from ui.R
    x    <- faithful[, 2]
    bins <- seq(min(x), max(x), length.out = bins_nr() + 1)

    # draw the histogram with the specified number of bins
    hist(x, breaks = bins, col = 'darkgray', border = 'white')

  })

}

shinyApp(ui, server)

您可以使用隐藏的方式将值从 ui 发送到服务器textInput

library(shiny)
library(shinyjs)

sendValueToServer <- function(id, value) {
  hidden(textInput(
    id, "If you can see this, you forgot useShinyjs()", value
  ))
}

myModuleUI <- function(id, param) {
  ns <- NS(id)
  tagList(
    sendValueToServer(ns("param_id"), param),
    textOutput(ns("text_out"))
  )
}

myModule <- function(input, output, session) {
  param <- isolate(input$param_id)

  output$text_out <- renderText({
    param
  })
}

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    myModuleUI("id", "test")
  ),
  server = function(input, output, session) {
    callModule(myModule, "id")
  }
)

可能有更直接的方法可以使用闪亮的 JavaScript API 来做到这一点,但这是一个“纯 R”解决方案,对于大多数用例来说应该足够了。请注意,您可以在初始化时使用输入值

isolate(input$text_in)

因为ui总是在服务器之前构建的。如果所有内容都包含在内,事情会变得更加复杂renderUI但你的情况似乎并非如此。

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

闪亮的模块:在创建模块 UI 时已经存储参数(附加参数),而不是将其传递给模块的服务器函数? 的相关文章

  • 获取矩阵条目的排名?

    假设一个矩阵 gt a lt matrix c 100 90 80 20 2 2 gt a 1 2 1 100 80 2 90 20 假设我想将矩阵的元素转换为等级 gt rank a lt rank a gt rank a 1 4 3 2
  • 按 ID 合并两个不均匀的数据框并填充缺失值

    我是 r 新手 这是我的第一个论坛问题 我正在尝试合并两个数据集 如下所示 df1 lt data frame ID letters 1 5 x 5 9 y c NA 6 5 NA NA gt df1 ID x y 1 a 5 NA 2 b
  • R:使用 dplyr 对列序列按行求和

    本着类似问题的精神here https stackoverflow com questions 28873057 sum across multiple columns with dplyr and here https stackover
  • 使用并行的 parLapply:无法访问并行代码中的变量

    我最近得到了一台具有多个核心的计算机 并且正在学习使用并行计算 我相当熟练lapply并被告知parLapply工作原理非常相似 但我没有正确操作它 看来我必须明确地将所有内容放入parLapply使其工作 即要使用的函数 变量等 和lap
  • 根据是否满足条件对绘图区域进行着色

    我正在使用创建线图ggplot and geom line 随着时间的推移而发展的价值观走廊 有时可能会发生上限低于下限 我将其称为 反转 并且我想突出显示在我的图中发生这种情况的区域 例如使用不同的背景颜色 搜索 Google 和 Sta
  • 使用不同时区的 POSIXct 到数字

    我想我一定不明白 POSIXct 是如何工作的 或者什么的 据我了解 它是自纪元以来的秒数 纪元是标准时间 例如 1970 01 01 GMT 我取两个 POSIXct 时间 一个在 EST 一个在 PST 它们是相同的绝对时间 然而 当我
  • 是否有 R 函数将 p.value 转换为显着性代码?

    summary显示 p values 的显着性代码 是否有 R 函数将 p value 转换为显着性代码 例如 0 02 gt 和 0 005 gt Use symnum如下所示 symnum了解更多信息 p values lt c 9 5
  • 过滤等于或大于某个值的数据的函数

    我有一个包含数千行和列的数据框 行包含基因名称 列包含样本名称 我只想保留 3 个以上样本中包含等于或大于 5 的值的行 到目前为止我已经尝试过 但我不知道如何设置多个条件 data frame1 gt filter all all var
  • 如何使用 ggplot 绘制反向(互补)ecdf?

    我目前使用 stat ecdf 来绘制累积频率图 这是我使用的代码 cumu plot lt ggplot house total year aes download speed colour ISP stat ecdf size 1 但是
  • RCurl 和自签名证书问题

    我在获取时遇到问题RCurl功能getURL访问使用自签名证书的服务器上的 HTTPS URL 我在 Mac OS X 10 9 2 上运行 R 3 0 2 我已阅读FAQ http www omegahat org RCurl FAQ h
  • %<>%操作的含义

    这个操作有什么作用呢 test lt gt select name list 这是来自一个名为magrittr lt gt 意思是 取出左边的部分 用右边的部分修改它 覆盖左边的变量 如果你更熟悉dplyr 它相当于 test lt tes
  • R Doplot() 坐标定位器()

    我绘制了 2 个 fasta 序列的点图 使用 seqinr 包中的 dotPlot 我需要从图中提取一些值 x y Dotplot 输出是图像 通用点图可能就是这个 例如 我需要局部对齐的开始和结束值 由紫色线表示所以这里有一个例子 l
  • 如何使用复选框以交互方式过滤 visNetwork 中的节点/边? (使用R闪亮)

    使用 Shiny 和 visNetwork R 包我创建了一个交互式网络可视化 我希望用户能够通过使用用户界面中的复选框来删除 添加节点和边 我设法让它部分工作 但不知何故 当过滤多个项目时 我的解决方案不起作用 可以查看我试图实现的行为的
  • 将 ddply + mutate 与自定义函数一起使用?

    I use ddply相当频繁 但历史上有summarize 偶尔mutate 并且只有基本功能 例如mean var1 var2等等 我有一个数据集 我试图在其中应用一个自定义的 更复杂的函数 并开始尝试深入研究如何做到这一点ddply
  • 将闪亮应用程序部署到 Shinyapps.io 时出错

    我有一个闪亮的应用程序 它在server R file library shiny Creating the app library ggplot2 library plyr library reshape2 library scales
  • 使用插入符包通过controls = cforest_unbiased()运行cforest

    我想使用插入符包运行一个公正的 cforest 这可能吗 tc lt trainControl method cv number f index indexList savePredictions T classProbs TRUE sum
  • 如果我设置 echo=FALSE,R Markdown 会使自定义绘图消失

    我创建了一个自定义函数 它将 mfrow 设置为 nxn 并根据数据框的输入列表创建 n 2 个散点图 每个图上有多个数据集 我的绘图函数的签名如下所示 plot return list lt function df list num pl
  • 创建具有多个变量的计数器[重复]

    这个问题在这里已经有答案了 我的数据如下所示 CustomerID TripDate 1 1 3 2013 1 1 4 2013 1 1 9 2013 2 2 1 2013 2 2 4 2013 3 1 2 2013 我需要创建一个计数器变
  • 如何使非常宽的 grid.table 或 tableGrob 适合 pdf 页面?

    我有一个相当宽的表格 页面宽度的 4 3 我正在尝试使用 grid table 或 grid arrange 通过 tableGrob 将其打印到 pdf 文件中 该表超出了页面边界并被剪裁 有没有办法强制 grid table grid
  • 如何在 R 中按组对列进行排序

    我有一个 data frame 比如 df 如下所示 Hospital Name State Mortality Rate hospital 1 AA 0 2 hospital 2 AA 0 3 hospital 3 BB 0 3 hosp

随机推荐