R 闪亮的动态小部件/井面板

R 闪亮的动态小部件/井面板,r,rstudio,shiny,R,Rstudio,Shiny,我正试图根据用户选择的id为“invar”在shiny中填充动态数量的widget/well面板。其思想是为每个用户选择的变量生成小部件/井面板,然后允许用户定义其概率分布和概率分布参数。 定义概率分布后,这些变量将用于计算。代码如下: library(shiny) library(triangle) library(readxl) library(relaimpo) library(data.table) library(XLConnect) library(xlsx) ui <-

我正试图根据用户选择的id为“invar”在shiny中填充动态数量的widget/well面板。其思想是为每个用户选择的变量生成小部件/井面板,然后允许用户定义其概率分布和概率分布参数。 定义概率分布后,这些变量将用于计算。代码如下:

library(shiny)
library(triangle)
library(readxl)
library(relaimpo)
library(data.table)
library(XLConnect)
library(xlsx)


ui <- fluidPage(

  titlePanel("Sensitivity & Uncertainty Analysis"),
  sidebarLayout(position = "left",
                sidebarPanel(
                  conditionalPanel(condition = "input.tabs1==1",
                                   tags$style(type='text/css', ".well { max-width: 20em; }"),
                                   # Tags:
                                   tags$head(
                                     tags$style(type="text/css", "select[multiple] { width: 100%; height:10em}"),
                                     tags$style(type="text/css", "select { width: 100%}"),
                                     tags$style(type="text/css", "input { width: 19em; max-width:100%}")
                                   ),

                                   # Select filetype:
                                   selectInput("readFunction", "Function to read data:", c(
                                     # Base R:
                                     "read.table",
                                     "read.csv",
                                     "read.csv2",
                                     "read.delim",
                                     "read.delim2",
                                     "readWorksheet",
                                     "read_excel",
                                     "read.xlsx"

                                   )),

                                   # Argument selecter:
                                   htmlOutput("ArgSelect"),

                                   # Argument field:
                                   htmlOutput("ArgText"),

                                   # Upload data:
                                   fileInput("file", "Upload data-file:"),

                                   # Variable selection:
                                   htmlOutput("varselect"),

                                   br(),

                                   uiOutput("invar"),
                                   br(),
                                   uiOutput("outvar"),

                                   textInput("name","Dataset name:","Data")),


                  conditionalPanel(condition = "input.tabs1==2",
                                   sliderInput("sampleSize","Please Select Sample Size:",min = 0,max = 5000,value = 1000,step = 100),

                                   uiOutput("distinvar"))


                ),
                mainPanel(
                  tabsetPanel(id="tabs1",
                              tabPanel("Data File",value = 1,tableOutput("table")),
                              tabPanel("Monte Carlo",value=2,plotOutput("Histogram"))
                  )
                )

  ))



server<-function(input, output) {
  options(shiny.maxRequestSize=30*1024^2)

  ### Argument names:
  ArgNames <- reactive({
    Names <- names(formals(input$readFunction)[-1])
    Names <- Names[Names!="..."]
    return(Names)
  })

  # Argument selector:
  output$ArgSelect <- renderUI({
    if (length(ArgNames())==0) return(NULL)

    selectInput("arg","Argument:",ArgNames())
  })

  ## Arg text field:
  output$ArgText <- renderUI({
    fun__arg <- paste0(input$readFunction,"__",input$arg)

    if (is.null(input$arg)) return(NULL)

    Defaults <- formals(input$readFunction)

    if (is.null(input[[fun__arg]]))
    {
      textInput(fun__arg, label = "Enter value:", value = deparse(Defaults[[input$arg]])) 
    } else {
      textInput(fun__arg, label = "Enter value:", value = input[[fun__arg]]) 
    }
  })


  ### Data import:
  Dataset <- reactive({
    if (is.null(input$file)) {
      # User has not uploaded a file yet
      return(data.frame())
    }

    args <- grep(paste0("^",input$readFunction,"__"), names(input), value = TRUE)

    argList <- list()
    for (i in seq_along(args))
    {
      argList[[i]] <- eval(parse(text=input[[args[i]]]))
    }
    names(argList) <- gsub(paste0("^",input$readFunction,"__"),"",args)

    argList <- argList[names(argList) %in% ArgNames()]

    Dataset <- as.data.frame(do.call(input$readFunction,c(list(input$file$datapath),argList)))
    return(Dataset)
  })

  # Select variables:
  output$varselect <- renderUI({

    if (identical(Dataset(), '') || identical(Dataset(),data.frame())) return(NULL)

    # Variable selection:    
    selectInput("vars", "Variables to use:",
                names(Dataset()), names(Dataset()), multiple =TRUE)            
  })

  # Show table:
  output$table <- renderTable({

    if (is.null(input$vars) || length(input$vars)==0) return(NULL)

    return(Dataset()[,input$vars,drop=FALSE])
  })

  #################################################################################

  varnames<-reactive({
    names(input$readFunction)
  })

  output$invar<-renderUI({
    selectizeInput('invar',"Select Regression Input Variables", choices = names(Dataset()), multiple = TRUE)
  })

  output$outvar<-renderUI({
    selectizeInput('outvar',"Select Regression Output Variable", choices = names(Dataset()), multiple = TRUE)

  })


  d.f<-Dataset


    output$distinvar<-renderUI({
      numvar<- length(input$invar())
      lapply(1:numvar, function(i) {
        selectInput("distinvar","Please Select Probability Distribution of Input Variable:",
                    choices = c("Normal","Uniform","Triangular"))
        conditionalPanel(condition = "input.distinvar=='Normal'",
                         textInput("invarpdfmean","Please Select Input Variable Mean:",0.25),
                         textInput("invarpdfsd","Please Select Input Variable Standard Deviation", 0.02))
        conditionalPanel(condition = "input.distinvar=='Uniform'",
                         textInput("invarpdfmin","Please Select Minimum Input Variable Value:",0.18),
                         textInput("invarpdfmax","Please Select Maximum Input Variable Value", 0.3))
        conditionalPanel(condition = "input.distinvar=='Triangular'",
                         textInput("invarpdfmin","Please Select Minimum Input Variable Value:",0.18),
                         textInput("invarpdfmax","Please Select Maximum Input Variable Value:", 0.3))
        conditionalPanel(condition = "input.distinvar=='Log Normal'",
                         textInput("invarpdfmeanlog","Please Select Mean Log of Input Variable:",0.18),
                         textInput("invarpdfsdlog","Please Select Standard Deviation Log of Input Variable:", 0.3))
      })



      output$MonteCarlo <- renderPlot({
        set.seed(1)


        n <- input$sampleSize




        if(distinvar=="Normal"){

          invarpdfVec <- rnorm(n,mean = as.numeric(input$invarpdfmean),sd= as.numeric(input$invarpdfsd))
        }
        if(distinvar=="Uniform"){

          invarpdfVec <- runif(n,min = as.numeric(input$invarpdfmin),max = as.numeric(input$invarpdfmax))
        }
        if(distinvar=="Triangular"){

          invarpdfVec <- rltriangle(n,a = as.numeric(input$invarpdfmin),b = as.numeric(input$invarpdfmax))
        }
        if(distinvar=="Log Normal"){

          invarpdfVec <- rlnorm(n,meanlog = as.numeric(input$invarpdfmeanlog),sdlog = as.numeric(input$invarpdfsdlog))
        }




        for (n in 1:input$sampleSize){
          h<- (0.1*distinvar+100)
        }


        hist(h)

      })})
  }







shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(三角形)
图书馆(readxl)
图书馆(relainpo)
库(数据表)
库(XLConnect)
图书馆(xlsx)

ui我尝试过使用您的代码,下面是使用
mtcars
dataset的结果:

library(shiny)

ui= fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectizeInput(inputId= "invar", label= "invar", 
                     choices= names(mtcars), 
                     selected= names(mtcars)[1],
                     multiple=T),
      uiOutput("distinvar"),
      uiOutput("distinvar2")
    ),
    mainPanel(
      tableOutput("tab")
    )
  ))


server= function(input, output,session) {

  sorted <-  reactive({
    data <- mtcars[ ,c(input$invar)]
    #print(input$invar)
    data})

  output$distinvar<-renderUI({
    numvar<- length(input$invar) # not input$ivar()!
    #print(numvar)
    lapply(1:numvar, function(i) {
      selectInput(inputId=paste0("distinvar",input$invar[i]),paste0("Please Select Probability Distribution of ", input$invar[i]),
                  choices = c("Normal","Uniform","Triangular"))})})

  output$distinvar2<-renderUI({
    numvar<- length(input$invar) # not input$ivar()!
    lapply(1:numvar, function(i) {
      if(eval(parse(text=paste0("input$",paste0("distinvar",input$invar[i])))) == "Normal"){
       textInput(paste0("invarpdfmean",input$invar[i]),"Please Select Input Variable Mean:",0.25)
      }
      else if(eval(parse(text=paste0("input$",paste0("distinvar",input$invar[i])))) == "Uniform"){
        textInput(paste0("invarpdfmin",input$invar[i]),"Please Select Minimum Input Variable Value:",0.18)
      }
      else{
        textInput(paste0("invarpdfmin",input$invar[i]),"Please Select Minimum Input Variable Value:",0.18),
      }
  })})


  output$tab= renderTable(sorted())



}

shinyApp(ui, server)
库(闪亮)
ui=fluidPage(
侧边栏布局(
侧栏面板(
选择输入(inputId=“因瓦”,label=“因瓦”,
选项=名称(mtcars),
选定=名称(mtcars)[1],
倍数=T),
uiOutput(“distinvar”),
uiOutput(“2”)
),
主面板(
表格输出(“选项卡”)
)
))
服务器=功能(输入、输出、会话){

排序我尝试了一下你的代码,下面是使用
mtcars
dataset的结果:

library(shiny)

ui= fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectizeInput(inputId= "invar", label= "invar", 
                     choices= names(mtcars), 
                     selected= names(mtcars)[1],
                     multiple=T),
      uiOutput("distinvar"),
      uiOutput("distinvar2")
    ),
    mainPanel(
      tableOutput("tab")
    )
  ))


server= function(input, output,session) {

  sorted <-  reactive({
    data <- mtcars[ ,c(input$invar)]
    #print(input$invar)
    data})

  output$distinvar<-renderUI({
    numvar<- length(input$invar) # not input$ivar()!
    #print(numvar)
    lapply(1:numvar, function(i) {
      selectInput(inputId=paste0("distinvar",input$invar[i]),paste0("Please Select Probability Distribution of ", input$invar[i]),
                  choices = c("Normal","Uniform","Triangular"))})})

  output$distinvar2<-renderUI({
    numvar<- length(input$invar) # not input$ivar()!
    lapply(1:numvar, function(i) {
      if(eval(parse(text=paste0("input$",paste0("distinvar",input$invar[i])))) == "Normal"){
       textInput(paste0("invarpdfmean",input$invar[i]),"Please Select Input Variable Mean:",0.25)
      }
      else if(eval(parse(text=paste0("input$",paste0("distinvar",input$invar[i])))) == "Uniform"){
        textInput(paste0("invarpdfmin",input$invar[i]),"Please Select Minimum Input Variable Value:",0.18)
      }
      else{
        textInput(paste0("invarpdfmin",input$invar[i]),"Please Select Minimum Input Variable Value:",0.18),
      }
  })})


  output$tab= renderTable(sorted())



}

shinyApp(ui, server)
库(闪亮)
ui=fluidPage(
侧边栏布局(
侧栏面板(
选择输入(inputId=“因瓦”,label=“因瓦”,
选项=名称(mtcars),
选定=名称(mtcars)[1],
倍数=T),
uiOutput(“distinvar”),
uiOutput(“2”)
),
主面板(
表格输出(“选项卡”)
)
))
服务器=功能(输入、输出、会话){

首先,你没有提供任何关于
input$indinvar
的足够信息,而且第一眼看你的
output$distinvar
没有任何意义。你不能在一个
renderUI
下同时呈现
selectInput
!在你的情况下,第二件事我会使用
如果……否则…
语句,而不是条件面板。请提供可复制的example@Malvina_a你能详细解释一下为什么“output$distvar”没有任何意义。我将研究“selectInput”和“text Input”。你不能在一个
renderUI
output$distvar
下呈现两个小部件。我将有一个好的,在你的代码中首先,你没有给出任何关于
input$invar
的足够信息,第一眼看你的
output$distinvar
没有任何意义。你不能将
selectInput
textInput
一起呈现在一个
Renderi
下!第二件事是,如果……否则我会使用
。。.
语句,而不是
条件面板
。请提供可复制的example@Malvina_a你能详细解释一下为什么“output$distvar”没有任何意义。我将研究“selectInput”和“text Input”。你不能在一个
renderUI
output$distvar
下呈现两个小部件看一看你的代码谢谢你的回复和对错误的解释。这里有没有类似的布局[.我想知道每个发行版下的条件,或者我还没有弄清楚如何设置格式。这是链接:谢谢你的回复并解释了错误。这里有没有类似的布局[.我想知道每个发行版下的条件。我还没有弄清楚如何设置格式。这是链接: