在 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)
}
})
我想创建一个交互式 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)
}
})