尝试创建一个闪亮的应用程序。在指定公式输入时出现错误

时间:2020-07-06 23:53:33

标签: r shiny

我正在尝试创建一个闪亮的应用程序,可以在其中输入回归公式并获得结果的输出。我尝试过:

library(shiny)

ui <- fluidPage(
    titlePanel("Text Input"),
    sidebarLayout(
        sidebarPanel(
            textInput(inputId = "text1", 
                      label = "Regression"), 
                      value = "Enter formula"),
        mainPanel(
           verbatimTextOutput("text1"),
           verbatimTextOutput("regout")
        )
)
)

server <- function(input, output, session) {
     output$text1 <- renderPrint({
        input$text1
      })
     formula <- reactive(input$text1)
     output$regout <- renderPrint({
      summary(formula)
      })  
}

shinyApp(ui = ui, server = server)

在应用中,我尝试输入此

lm(mpg ~ disp + wt, data = mtcars)

但是我遇到了这个错误:

Error: object of type 'closure' is not subsettable

“ closure”类型的对象是什么意思,我该如何使其工作?

2 个答案:

答案 0 :(得分:2)

您错过了括号:summary(formula())。但是,如果您输入lm(mpg ~ disp + wt, data = mtcars),则会得到 string "lm(mpg ~ disp + wt, data = mtcars)"。这将不会运行代码lm(mpg ~ disp + wt, data = mtcars)

您可以输入mpg ~ disp + wt并执行以下操作:

lmformula <- reactive({
  tryCatch({
    as.formula(input$text1)
  }, error = function(e) NULL)
})

lmreg <- reactive({
  if(!is.null(lmformula())){
    tryCatch({
      lm(lmformula(), data = mtcars)
    }, error = function(e) NULL)
  }
})

lmsummary <- reactive({
  if(!is.null(lmreg())){    
 summary(lmreg())
  }
}) 

output$regout <- renderPrint({
  lmsummary()
})

答案 1 :(得分:0)

任何渲染函数已经是反应式上下文,因此您无需将公式变量声明为其自身的反应式。该错误消息非常普遍,但是我假设由于在响应上下文中具有响应上下文的这种怪异性质而弹出了该消息,尽管我认为这不是明确禁止的。无论如何,这就是服务器功能中的代码。

server <- function(input, output, session) {
    
    output$text1 <- renderPrint({
        input$text1
    })
    
    output$regout <- renderText({
        summary(input$text1)
    })  
}

由于我们还没有进行任何回归,因此您将在输出中看到类似的内容。

1 character character

定义您自己的公式可能会比较棘手,因为您通常将它们作为字符串文字传递给lm()函数。但是,是的,这就是我所拥有的,祝你好运!