Shiny R - 为模型创建新的data.frame

时间:2016-09-01 12:59:58

标签: r shiny

我对R很新,甚至更新Shiny。 我有一个R脚本,我现在想转换为Shiny,但我总是失败。

我有一个带有变量Wanddicke,T1,T2,T2star,ADC,Vivo的数据集,它保存在" Basisdaten.csv"中。此外,还有一个变量DSS,用于定义结果(0或1)。 我希望加载此文件,并且应该使用此数据集训练GLM模型以预测" DSS"。 然后我想让用户有机会为Wanddicke,T1,T2,T2star,ADC,Vivo输入自己的参数,我希望Shiny返回预测。

这是我现在所拥有的,但由于我没有解释的原因,它不会运行。谁能告诉我我的错误在哪里?我怀疑在生成新data.frame" mydatanew"期间会出现问题。非常感谢。

UI.R

 library(shiny)
shinyUI(fluidPage(

  # Application title
  titlePanel("Colitis Evaluator"),

  # Sidebar  
  sidebarLayout(
    sidebarPanel(
       numericInput("Dicke",
                   "Wanddicke in mm:",
                   ""),
       numericInput("T1",
                    "T1 in ms:",
                    ""),
       numericInput("T2",
                    "T2 in ms:",
                    ""),
       numericInput("T2star",
                    "T2* in ms:",
                    ""),
       numericInput("ADC",
                    "ADC in 10^-6 mm^2/s",
                    ""),
       numericInput("Vivo",
                    "In Vivo als 1",
                    ""),

       #  selectInput("Vivo", "In vivo/Ex vivo:", 
       #               choices = c("In vivo" = 1, "Ex vivo" = 0))

    submitButton("Submit")

    ),


    mainPanel(

      textOutput("Score")


    )
  )
))

Server.R

library(shiny)

Basisdaten <- read.table("Basisdaten.csv", header=TRUE, sep=";", na.strings="NA", dec=".", strip.white=TRUE)
model.glm <- glm(formula=DSS==1 ~ Wanddicke + T1 + T2 + T2star + ADC + Vivo + (Wanddicke+T1+T2+T2star+ADC+Vivo)^3,family=binomial(),data=Basisdaten,na.action=na.omit)



shinyServer(function(input, output) {



     mydatanew <- data.frame(Wanddicke=input$Dicke,T1=input$T1,T2=input$T2,T2star=input$T2star,ADC=input$ADC,Vivo=input$Vivo)
     mydatanew$Score <- predict(model.glm, newdata=mydatanew, type="response")
     output$Score <- renderText(mydatanew$Score)


})

1 个答案:

答案 0 :(得分:0)

以下代码应该有效 我&#39;由于csv文件很差,我们添加了一些抽样...

你可能已经在你的控制台中看到一些抱怨在没有主动反应背景的情况下不允许进行操作 您可能会发现这个有趣:http://shiny.rstudio.com/articles/reactivity-overview.html

CSV

Wanddicke,T1,T2,T2star,ADC,Vivo,DSS
10,2,3,4,5,6,0
20,4,6,8,10,12,1

server.R

library(shiny)

Basisdaten <- read.table("Basisdaten.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)
model.glm <- glm(formula=DSS==1 ~ Wanddicke + T1 + T2 + T2star + ADC + Vivo + (Wanddicke+T1+T2+T2star+ADC+Vivo)^3,family=binomial(),data=Basisdaten,na.action=na.omit)



shinyServer(function(input, output) {

  output$Score <- renderText({

    mydatanew <- data.frame(Wanddicke=input$Dicke,T1=input$T1,T2=input$T2,T2star=input$T2star,ADC=input$ADC,Vivo=input$Vivo)
    mydatanew$Score <- predict(model.glm, newdata=mydatanew, type="response")
    mydatanew$Score + sample(1:100, 1)
    })
})

ui.R

library(shiny)
shinyUI(fluidPage(

  # Application title
  titlePanel("Colitis Evaluator"),

  # Sidebar  
  sidebarLayout(
    sidebarPanel(
      numericInput("Dicke",
                   "Wanddicke in mm:",
                   10),
      numericInput("T1",
                   "T1 in ms:",
                   1),
      numericInput("T2",
                   "T2 in ms:",
                   2),
      numericInput("T2star",
                   "T2* in ms:",
                   3),
      numericInput("ADC",
                   "ADC in 10^-6 mm^2/s",
                   4),
      numericInput("Vivo",
                   "In Vivo als 1",
                   0),

      #  selectInput("Vivo", "In vivo/Ex vivo:", 
      #               choices = c("In vivo" = 1, "Ex vivo" = 0))

      submitButton("Submit")

    ),


    mainPanel(

      textOutput("Score")


    )
  )
))