获取在闪亮模块中创建的Dynamicallu的输入值

发布于 2025-02-10 01:07:51 字数 2052 浏览 0 评论 0原文

我创建了一个闪亮的应用程序,可以正常工作,但是我的下一步是创建一个模块,该模块允许与我合作的其他人创建执行此操作的应用程序,而无需完全重写代码。

主要的更改将是关于作为输入的数字参数的数量。 我的目标是创建一个模块,该模块作为输入,是参数名称的列表以及其标签列表,以创建具有这些名称和标签的数字输入。 困难是有一个数字输入为每个参数生成多个输入。 我已经成功地创建了UI部分,但是我无法访问模块中的这些输入,以将它们用于我的模块的下一部分。

到目前为止,我最好的尝试是:

library(shiny)
#example of list of names and labels that will be written by my colleagues
names_list <- c ("alpha","beta","gamma","delta")
labels_list <- c ("\\(\\alpha\\)","\\(\\beta\\)","\\(\\gamma\\)","\\(\\delta\\)")

parametresUI <-function(id){
  ns <-NS(id)
  tagList(fluidRow(numericInput(ns("nb"),label="number of steps",value=2,min=0)),
          fluidRow(uiOutput(ns("parametres"))),
          fluidRow(verbatimTextOutput(ns("value"))))
}

parametresServer <- function(id,names_list,labels_list){
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    output$parametres <-renderUI({
      number_list<-as.list(1:input$nb)
      div(class = "dynamicSI",
          lapply(1:length(names_list),function(j){
            lapply(number_list, function(i) {
              fluidRow(column(3,
                              withMathJax(numericInput(inputId=paste0(names_list[j], i), label = paste0(labels_list[j], i),value=0,min=0)
                              )),
                       column(3,
                              withMathJax(numericInput(inputId=paste0("varia",names_list[j], i), label = paste0("\\(\\sigma\\)(",labels_list[j], i,")"),value=0,min=0)
                              )),
              )
            })
          })
      )
    })
    #test to see if I can access value of one numeric input : doesn't work
    output$value<-renderText({
      value <- input$alpha1
      #or
      #value <- input[[paste0(names_list[1],1)]]
      value
    })
  })
}

ui <- fluidPage(
  parametresUI("test"),
)

server <- function(input, output, session) {
  parametresServer("test",names_list = names_list ,labels_list = labels_list)
}
shinyApp(ui, server)

该模块应该使用输入来创建模拟,但我只是展示了一个未能显示一个值

I've created a Shiny app that works just fine but my next step is to create a module that allows other people who work with me to create apps that do the same without having to rewrite completely the code.

The main change would be on the numbers of numeric parameters that are asked as an input.
My goal was to create a module that has, as an input, a list of the parameters' name and the list of their label to create automatically numeric inputs with these names and labels.
The difficulty is that there is a numeric input that generate automatically multiple inputs for each parameter.
I've succeeded to create the UI part but I fail to get access to these inputs in the module to use them for the next part of my module.

My best try so far is :

library(shiny)
#example of list of names and labels that will be written by my colleagues
names_list <- c ("alpha","beta","gamma","delta")
labels_list <- c ("\\(\\alpha\\)","\\(\\beta\\)","\\(\\gamma\\)","\\(\\delta\\)")

parametresUI <-function(id){
  ns <-NS(id)
  tagList(fluidRow(numericInput(ns("nb"),label="number of steps",value=2,min=0)),
          fluidRow(uiOutput(ns("parametres"))),
          fluidRow(verbatimTextOutput(ns("value"))))
}

parametresServer <- function(id,names_list,labels_list){
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    output$parametres <-renderUI({
      number_list<-as.list(1:input$nb)
      div(class = "dynamicSI",
          lapply(1:length(names_list),function(j){
            lapply(number_list, function(i) {
              fluidRow(column(3,
                              withMathJax(numericInput(inputId=paste0(names_list[j], i), label = paste0(labels_list[j], i),value=0,min=0)
                              )),
                       column(3,
                              withMathJax(numericInput(inputId=paste0("varia",names_list[j], i), label = paste0("\\(\\sigma\\)(",labels_list[j], i,")"),value=0,min=0)
                              )),
              )
            })
          })
      )
    })
    #test to see if I can access value of one numeric input : doesn't work
    output$value<-renderText({
      value <- input$alpha1
      #or
      #value <- input[[paste0(names_list[1],1)]]
      value
    })
  })
}

ui <- fluidPage(
  parametresUI("test"),
)

server <- function(input, output, session) {
  parametresServer("test",names_list = names_list ,labels_list = labels_list)
}
shinyApp(ui, server)

The module is supposed to use the inputs to create simulations but I've just shown an exemple that fails to display one value

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

殤城〤 2025-02-17 01:07:51

您只是缺少命名空间ns。尝试一下

parametresServer <- function(id,names_list,labels_list){
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    output$parametres <-renderUI({
      number_list<-as.list(1:input$nb)
      div(class = "dynamicSI",
          lapply(1:length(names_list),function(j){
            lapply(number_list, function(i) {
              fluidRow(column(3,
                              withMathJax(numericInput(inputId=ns(paste0(names_list[j], i)), label = paste0(labels_list[j], i),value=9,min=0)
                              )),
                       column(3,
                              withMathJax(numericInput(inputId=ns(paste0("varia",names_list[j], i)), label = paste0("\\(\\sigma\\)(",labels_list[j], i,")"),value=0,min=0)
                              )),
              )
            })
          })
      )
    })
    #test to see if I can access value of one numeric input : doesn't work
    output$value<-renderText({
      value <- input$alpha1
      #or
      #value <- input[[paste0(names_list[1],1)]]
      value
    })
  })
}

You are just missing namespace ns. Try this

parametresServer <- function(id,names_list,labels_list){
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    output$parametres <-renderUI({
      number_list<-as.list(1:input$nb)
      div(class = "dynamicSI",
          lapply(1:length(names_list),function(j){
            lapply(number_list, function(i) {
              fluidRow(column(3,
                              withMathJax(numericInput(inputId=ns(paste0(names_list[j], i)), label = paste0(labels_list[j], i),value=9,min=0)
                              )),
                       column(3,
                              withMathJax(numericInput(inputId=ns(paste0("varia",names_list[j], i)), label = paste0("\\(\\sigma\\)(",labels_list[j], i,")"),value=0,min=0)
                              )),
              )
            })
          })
      )
    })
    #test to see if I can access value of one numeric input : doesn't work
    output$value<-renderText({
      value <- input$alpha1
      #or
      #value <- input[[paste0(names_list[1],1)]]
      value
    })
  })
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文