我正试图在Shiny中创建一个绘图,但它不起作用。它是空白的。我认为这是因为lavaanPlot
使用了DiagrammeR
svg图形。
这是代码
library(shiny)
library(lavaan)
library(lavaanPlot)
ui <- fluidPage(
titlePanel("Text Input"),
sidebarLayout(
sidebarPanel(
textAreaInput(inputId = "text1",
label = "Syntax"),
value = "Enter formula"),
mainPanel(
plotOutput("plot"),
verbatimTextOutput("text1"),
verbatimTextOutput("regout")
)))
server <- function(input, output, session) {
formula <- reactive({
tryCatch({
input$text1
}, 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()
})
plot2 <- reactive({
lavaanPlot(model = model)
})
output$plot <- renderPlot({
plot2
})
}
shinyApp(ui = ui, server = server)
我有时会遇到这样的错误:
Error: trying to get slot "ParTable" from an object (class "reactiveExpr") that is not an S4 object
在ui中。输出图的R代码为
mainPanel(plotOutput("plot")
但是,在服务器中。R输出$plot的名称为plot2,
output$plot <- renderPlot({plot2......
也许原因就在上面。
我将绘图作为推荐的函数,然后使用renderGrViz
和grVizOutput
,它起作用了。
我做到了:
output$plot2 <- renderGrViz({
lavaanPlot(model = model())
})
和这个
grVizOutput("plot2", width = "50%", height = "100px")