R Shiny - Ошибка: операция не разрешена без активного реактивного контекста - PullRequest
1 голос
/ 05 августа 2020

Я новичок в R и программировании, поэтому, пожалуйста, извините меня, если это простой вопрос.

Я пытаюсь создать приложение Shiny, которое отображает различные сценарии прибыли ios модель ставок в зависимости от входных значений, выбранных пользователем.

Элементы управления: 1. Тип ставки, 2. Модель прогноза и 3. Стратегия ставок.

По сути, я хочу условно добавить новые столбцы в исходном фрейме данных и в конечном итоге использовать некоторые из новых столбцов для создания графика.

Файл пользовательского интерфейса:


ui<- fluidPage(
  h1("Germany"),

  selectInput(inputId="Type", label= "Bet Type",
              choices = c("Home", "Away")),
  selectInput(inputId="Model", label= "Prediction Model",
              choice=c("LASSO", "Step-Model1", "Step-Model2")),
  selectInput(inputId="StakingStrategy", label= "Staking Strategy",
              choice=c("Fixed Amount","Fractional System",
                       "Fractional Kelly")), 
  plotOutput('budget')
  
)

Файл сервера:

  
server<- function(input, output){
#load dataset   
datafile1<-read.csv("Bundesligaprep.csv",  
                      header=TRUE,stringsAsFactors = FALSE)

#Load required prediction-model
pred <-reactive({
  if (input$Type == "Home")
  {if (input$Model == "LASSO")
    {readRDS("BundesligaLASSO.rds")}
    else if (input$Model == "Step-Model1")
    {readRDS("BundesligaStep1.rds")}
    else if (input$Model =="Step-Model2")
    {readRDS("BundesligaStep2.rds")}}
  else if (input$Type == "Away")
  {if (input$Model == "LASSO")
  {readRDS("BundesligaLASSO.A.rds")}
    else if (input$Model == "Step-Model1")
    {readRDS("BundesligaStep1A.rds")}
    else if (input$Model =="Step-Model2A")
    {readRDS("BundesligaStep2A.rds")}}
})
#add predicted odds and probabilities in new columns 
df <- reactive({
  df<-
  datafile1()%>%
    modelr::add_predictions(pred,var="MyProbsH", type="response")%>%
    mutate(MyProbsX2=1-MyProbsH)%>%
    mutate(MyOddsH=1/MyProbsH)%>%
    mutate(MyOddsX2=1/MyProbsX2)%>%
    mutate(RealOddsB365H=B365H/(1/(1/B365H+1/B365D+1/B365A)))%>%
    mutate(RealOddsPSH=PSH/(1/(1/PSH+1/PSD+1/PSA)))%>%
    mutate(RealProbsB365H=1/RealOddsB365H)%>%
    mutate(RealProbsPSH=1/RealOddsPSH)

#add new columns for budget and profit based on staking strategy
reactiveValues({
  df$profitH<-as.numeric(0) 
  df$budgetH<-as.numeric(100)

  if (input$StakingStrategy == "FractionalKelly")
  {
  for(i in 2:nrow(df[51]))
  {
    if(df[i, 49]<df[i,51] & df[i,49]<=2 & df[i,36]==1)
    {df[i,55]<-(((((df[i,51]-1)*(1/df[i,49]))-(1-(1/df[i,49])))/(df[i,51]-1))*df[i-1, 56]*df[i, 39]-((((df[i,51]-1)*(1/df[i,49]))-(1-(1/df[i,49])))/(df[i,51]-1))*df[i-1, 56])/8
    df[i,56]<-df[i-1,56]+df[i,55]}
    else if(df[i, 49]<df[i,51] & df[i,]<=2 & df[i,36]==0)
    {df[i,55]<- -(((((df[i,51]-1)*(1/df[i,49]))-(1-(1/df[i,49])))/(df[i,51]-1))*df[i-1, 56])/8
    df[i,56]<-df[i-1,56]+df[i,55]}
    else 
    {
      df[i,56]<-df[i-1,56]
      df[i, 55]<-as.numeric(0)}}
  }
  else if (input$StakingStrategy == "FractionalSystem")
  {
  for(i in 2:nrow(df[51]))
  {
    if(df[i, 49]<df[i,51] & df[i,49]<=2 & df[i,36]==1)
    {df[i,55]<-(0.1*df[i-1,56] *df[i, 39])-(0.1*df[i-1, 56])
    df[i,56]<-df[i-1,56]+df[i,55]}
    else if(df[i, 49]<df[i,51] & df[i,49]<=2 & df[i,36]==0)
    {df[i,55]<- -0.1*df[i-1, 56]
    df[i,56]<-df[i-1,56]+df[i,55]}
    else 
    {
      df[i,56]<-df[i-1,56]
      df[i, 55]<-as.numeric(0)}}
  }
  else if (input$StakingStrategy == "Fixed Amount")
  {
  for(i in 2:nrow(df[51]))
  {
    if(df[i, 49]<df[i,51] & df[i,49]<=2 & df[i,36]==1)
    {df[i,55]<-10*df[i-1,56] *df[i, 39]-10
    df[i,56]<-df[i-1,56]+df[i,55]}
    else if(df[i, 49]<df[i,51] & df[i,]<=2 & df[i,36]==0)
    {df[i,55]<- -10*df[i-1, 56]
    df[i,56]<-df[i-1,56]+df[i,55]}
    else 
    {
      df[i,56]<-df[i-1,56]
      df[i, 55]<-as.numeric(0)}}
  }
  
})

#create plot 
output$budget <- renderPlot({plot(df$Count, df$budget,type="l", col="blue", xlab="Matches played", ylab="Budget"
)})

}

shinyApp(ui = ui, server = server)

Я сталкиваюсь с различными проблемами, но сейчас, когда я запускаю приложение, появляется сообщение об ошибке: «операция не разрешена без активного реактивного контекста». Я действительно изо всех сил пытаюсь понять некоторые основные концепции c, используемые в Shiny, поэтому я был бы признателен за любой намек относительно того, почему возникает эта ошибка. Я надеюсь, что смогу разъяснить свою просьбу.

...