预测值不响应用户输入Rshiny

预测值不响应用户输入Rshiny,r,shiny,random-forest,predict,R,Shiny,Random Forest,Predict,我正在尝试建立一个闪亮的应用程序,根据不同的用户输入提供新的预测。 然而,即使输入值随输入更新,预测值也不会更新。我很难找出原因 该模型是一个随机森林回归模型,在本例中,我使用的是数字变量,但在我的情况下,输入是分类的(我不认为此更改会影响任何东西),这就是为什么侧边栏都是选择输入,而不是选择数字 我用mtcars数据集制作了一个可复制的示例 model <- ranger(mpg ~ disp + hp + wt, data = mtcars) ui <- fluidPage

我正在尝试建立一个闪亮的应用程序,根据不同的用户输入提供新的预测。 然而,即使输入值随输入更新,预测值也不会更新。我很难找出原因

该模型是一个随机森林回归模型,在本例中,我使用的是数字变量,但在我的情况下,输入是分类的(我不认为此更改会影响任何东西),这就是为什么侧边栏都是选择输入,而不是选择数字

我用mtcars数据集制作了一个可复制的示例

model <- ranger(mpg ~ disp + hp + wt, data = mtcars)



ui <- fluidPage(
  sidebarPanel(
    selectInput('disp', 'disp',
              choices = unique(mtcars$disp),
            selected = unique(mtcars$disp)[1]),
selectInput('hp', 'hp',
            choices = unique(mtcars$hp),
            selected = unique(mtcars$hp)[1]),
selectInput('wt', 'wt',
            choices = unique(mtcars$wt)),
actionButton("Enter", "Enter Values"),
width = 2
  ),
  mainPanel(
tableOutput('mpg')
)
)

server <- function(input, output, session) {




  val <- reactive({

new <- mtcars[1, ]
new$disp <- input$disp
new$hp <- input$hp
new$wt <- input$wt

new
  })

  out <- eventReactive(
    input$Enter,
    {
      val <- val()
      val$pred <- predict(model, data = val)$predictions
      val

    })

  output$mpg <- renderTable({


    out()

  })


}

shinyApp(ui, server)

model这里有几个问题

1) 您使用的selectInput不正确。见下文。基本上,使用mtcars$disp[1]这样的索引将创建静态值,无论选择什么

2) 当您只生成一个值作为输出时,您使用的是renderTable()。为什么不直接使用renderText()?见下文

3) 需要使用EventResponsive触发器(即输入$enter)来创建输入值的数据帧。模型预测可以稍后在数据帧上运行,但初始触发器实际上从selectInput提取值,因此触发器需要位于创建数据帧的同一块中

此操作运行正常,并在我的机器上产生了所需的输出:

library(shiny)
library(ranger)

model <- ranger(mpg ~ disp + hp + wt, data = mtcars)

ui <- fluidPage(

        sidebarPanel(

                selectInput('disp', 'disp',
                            unique(mtcars$disp)),

                selectInput('hp', 'hp',
                            unique(mtcars$hp)),

                selectInput('wt', 'wt',
                            unique(mtcars$wt)),

                actionButton("enter", label = "Enter Values"),
                width = 2
        ),

        mainPanel(

                textOutput('mpg')

        )

)

server <- function(input, output, session) {

        val <- eventReactive(

                input$enter, {

                data.frame(

                        disp = input$disp,
                        hp = input$hp,
                        wt = input$wt,
                        stringsAsFactors = F

                )}

        )

        output$mpg <- renderText({

                predict(model, val())[[1]]

        })

}

shinyApp(ui, server)
库(闪亮)
图书馆(游侠)

建模
predict()
的参数应该是
newdata=
,而不是
data=
将代码更改为
val$pred。在shinySorry之外运行此函数时,数据参数也可以正常工作,那么我想无论
ranger()
是什么,都必须使用与使用
predict()
的所有其他对象不同的约定。请确保明确列出您使用的任何非base R包。输入所有
library()
命令,以便我们可以复制/粘贴要测试的代码。是的,我应该包括im使用
caret