У меня есть приложение 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)