使用Shiny中的反应数据帧进行预测(svm)

时间:2015-05-28 17:33:17

标签: r shiny shiny-server

我想创建一个交互式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或vector,我们将不胜感激。

谢谢!

编辑以反映第一个答案中提到的遗漏。

2 个答案:

答案 0 :(得分:1)

第39页: http://cran.r-project.org/web/packages/e1071/e1071.pdf 这是svm函数的文档,它表示函数“predict”将返回结果。

所以尝试改变这个:

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

这样的事情:

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

请注意您的第一个电话:

svm(Y~X1+X2, data=df, probability=TRUE)
由于下一次调用捕获了svm对象(svm.test变量)

什么都不做

此外,由于你将返回概率,你的“预测”变量将是一个包含M行(#要预测的东西)和N列(类的数量)的数组......所以在构造数据帧时要注意这一点从结果。

希望这有帮助。

答案 1 :(得分:0)

我想我在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)

  }
})