【问题标题】:Use a reactive dataframe in Shiny to predict(svm)在 Shiny 中使用响应式数据框进行预测(svm)
【发布时间】:2015-08-11 08:45:53
【问题描述】:

我想创建一个交互式 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 或向量的任何帮助,将不胜感激。

谢谢!

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

【问题讨论】:

    标签: r shiny shiny-server


    【解决方案1】:

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

    所以尝试改变这个:

    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 列(类数)的数组...所以在构建数据框时请注意这一点结果。

    希望这会有所帮助。

    【讨论】:

    • 很好,谢谢!当我把代码放在一起时,我搞砸了,肯定需要将预测存储在一个对象中。我仍然不知道如何让 Shiny 对象与 predict 函数一起工作 - 它给了我错误消息“1:nrow(newdata) 中的错误:长度为 0 的参数”
    • 很高兴为您提供帮助。 “任何关于如何将输出保存为可用于预测函数的数据帧或向量的任何帮助都将不胜感激。”有点含糊......也许你可以详细说明你是什么寻求与结果有关。
    • 当然 - Shiny 似乎将反应函数(newEntry 的结果)保存为不是典型数据帧的东西。我想我在某处读过它,它把它保存为一个公式或类似的东西。当我尝试使用 newEntry 作为值向量进入预测函数时,它给了我“1:nrow(newdata) 中的错误:长度为 0 的参数”错误,我不知道如何解决这个问题。
    • @cmurp002 这会有所帮助吗:stackoverflow.com/questions/23038580/…
    • input$update 行看起来不需要。此外,您的反应函数中的 newLine 不会被返回......如果这是你想要的......return(newLine) ?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2017-11-20
      • 2018-05-27
      • 2018-05-29
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 2019-02-15
      • 2019-11-16
      相关资源
      最近更新 更多