保存用户输入的数据框

时间:2017-07-02 11:31:26

标签: r shiny

注意:请随意批评我所写的代码,因为我正在学习,我做错了什么,如何改进等等。

我正在学习R和闪亮,并希望使用用户输入实现计算,但是我很难将用户输入存储到数据框中以供我访问以便稍后运行计算。

我的想法是让用户从虹膜数据集中为他或她选择的变量定义概率分布。一旦他定义了它们,我想将这些定义的变量存储到数据帧中,这样我就可以在以后使用用户定义的数据帧运行蒙特卡洛等计算(所以我需要将其作为数据框调用) )。

我试图让代码尽可能简单:

library(shiny)
ui <- fluidPage(
  fluidRow(
    column(4,
    wellPanel(
      selectizeInput(inputId= "invar", label= "Select Variable", 
                     choices= names(iris), 
                     selected= names(iris)[1],
                     multiple=T),
  uiOutput("moC"))),


  mainPanel(
    tableOutput("tab")
  )
))
server <- function(input, output) {

  sorted <-  reactive({
    data <- iris[ ,c(input$invar)]

    data})

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


    )})})
}

编辑:根据评论更新了代码。感谢

library(shiny)
ui <- fluidPage(
  fluidRow(
    column(4,
           wellPanel(
             selectizeInput(inputId= "invar", label= "Select Variable", 
                            choices= names(iris), 
                            selected= names(iris)[1],
                            multiple=TRUE),
             uiOutput("moC"))),


    mainPanel(
      tableOutput("tab")
    )
  ))
server <- function(input, output) {

  sorted <-  reactive({
              iris[input$invar]
              })

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


      )})})
}


shinyApp(ui, server)

编辑2: 似乎我不清楚道歉: 期望的输出是用户所选变量的线性模型的直方图,其中数据来自用户定义的变量。因此,如果他选择Sepal.LengthPetal.Length并使用统一或正态分布定义它们,我想使用从用户输入创建的数据框在线性模型上运行蒙特卡罗。

所以稍后我想运行一个看起来像这样的代码:

n<-1000
Lm <- Sepal.Length + Petal.Length
    for (n in 1:n) {
      H=predict(LM,MCtab)
    }

其中MCtab是一个数据框,由用户使用他或她选择的变量创建。这是我无法弄清楚如何做的。

1 个答案:

答案 0 :(得分:0)

对于MCtab(根据用户选择的输入,它只是数据集的一个子集),您可以使用MCtab <- iris[ , input$invar]。请注意那里的逗号。此外,如果用户删除了所有选项,您应该检查input$invar是否为空。