Как добавить новые поля и использовать входные значения из этих полей и передать все поля функции в R Shiny? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть приложение Shiny, которое принимает два поля ввода Latent variable и Indicators, которые вставляются на стороне сервера и отображают результат. Я хотел бы добавить несколько полей ввода пользовательского интерфейса Latent variables и Indicators.

Чтобы дать некоторый контекст, функция lavaan создает скрытые переменные с указанным скрытым именем переменной и соответствующими индикаторами. Таким образом, каждое скрытое имя переменной или latent variable связано с indicators.

Я хотел бы создать несколько пар latent variables и indicators для добавления в модель.

Например, я хотел бы ввести «визуально» и выбрать «x1», «x2» и «x3». Затем я нажимал кнопку, чтобы добавить поля latent variable и indicators, а затем вводил «текстовый» и выбирал «x4», «x5» и «x6». В конце концов, я хотел бы добавить больше полей.

Затем на стороне сервера эти строки будут вставлены как новые строки и добавлены в модель. Возможно ли это?

Вот код приложения:

library(shiny)
library(lavaan)

ui <- fluidPage(
    titlePanel("Text Input"),
    sidebarLayout(
        sidebarPanel(
            textInput(inputId = "text1", 
                      label = "Latent Variable"), 
            selectInput(inputId = "select1",
                        label = "Indicators",
                        choices = "",
                        multiple = TRUE)),
                         
        mainPanel(
           verbatimTextOutput("text1"),
           verbatimTextOutput("regout")
        )
)
server <- function(input, output, session) {
  observe({
    updateSelectInput(session, "select1", choices = names(HolzingerSwineford1939))
  })
    
  syntax1 <- reactive({input$text1})
  
  syntax2 <- reactive({
    
    paste("=~", paste(input$select1, collapse = " + "))
    
  })
  
  syntax <- reactive({paste(syntax1(), syntax2())})
  
  formula <- reactive({
    tryCatch({
      syntax()
    }, error = function(e) NULL)
  })
  
  
  model <- reactive({
    if(!is.null(formula()))
    tryCatch({
        cfa(formula(), data = HolzingerSwineford1939)
      }, error = function(e) NULL)
    })
  
  results <- reactive({
    if(!is.null(model())){
      summary(model(), fit.measures = TRUE)
    }
  }) 
    
    output$regout <- renderPrint({
      results()
    })
  }
shinyApp(ui = ui, server = server)
...