在 Shiny 中使用反应式数据框来预测(svm)

Use a reactive dataframe in Shiny to predict(svm)

我想创建一个交互式 Shiny 应用程序,用户可以在其中输入数据框的值,然后它将该数据框应用于 svm 中的预测,根据给定的值给出预测的输出。但是,我似乎无法弄清楚如何以我可以应用于预测功能的格式保存反应。谁能帮我?

我的 server.R 文件:

library(e1071)

X1 <- runif(100)
X2<- runif(100)          
Y <-runif(100) 
df <-data.frame(Y,X1,X2)

svm(Y~X1+X2, data=df, probability=TRUE)

svm.test<-svm(Y~X1+X2, data=df, probability=TRUE)




library("shiny")
shinyServer(
function(input,output,session){

tableStart <- data.frame(X1=4, X2=6)

newEntry <- reactive({
  input$update
  newLine <- isolate(data.frame(X1=input$X1, X2=input$X2))
})
output$table1 <- renderTable({rbind(tableStart, newEntry())})


predictions<-predict(svm.test, newEntry, probability=TRUE)    

我的 ui.R 文件:

library("shiny")    
shinyUI(pageWithSidebar(headerPanel("Adding entries to table"),
                    sidebarPanel( sliderInput("X1", 
                                              label = "X1:",
                                              min = 0, max = 10, value = 0),

                                  sliderInput("X2", 
                                              label = "X2:",
                                              min = 0, max = 10, value = 0),
                                 actionButton("update", "Update Table")),
                    mainPanel(tableOutput("table1"))))

如果您能就如何将输出保存为 data.frame 或可用于预测函数的向量提供任何帮助,我们将不胜感激。

谢谢!

编辑以反映第一个答案中指出的遗漏。

第 39 页: http://cran.r-project.org/web/packages/e1071/e1071.pdf 这是 svm 函数的文档,它表明函数 "predict" 将 return 您的结果。

所以尝试改变这个:

predict(svm.test, newEntry, probability=TRUE) 

像这样:

predictions <- predict(svm.test, newEntry, probability=TRUE) 

请注意,您的第一个电话:

svm(Y~X1+X2, data=df, probability=TRUE)

不执行任何操作,因为下一次调用会捕获 svm 对象(svm.test 变量)

此外,由于您将 returning 概率,您的 "predictions" 变量将是一个包含 M 行(# 要预测的事物)和 N 列(类 的数量)的数组)...所以在从结果构建数据框时要注意这一点。

希望对您有所帮助。

我想我在 Hack-R 的 github 上找到了答案(我从这里搜索找到的)。

https://github.com/hack-r/coursera_shiny

我不太理解代码,但我认为我可以将其分解为我的完整示例。感谢 user1269942 的帮助,感谢 Hack-R 在 git.

上发布他的成品
output$text <- renderPrint({
  {  ds1        <- values$df 
  a <- predict(svm.test, newdata = data.frame(ds1))
  names(a) <- NULL
  cat(a)

  }
})