Цифровой ввод не работает в априори в R блестящий

У меня есть этот код в ui.R:

tabPanel("Experiment 1",sidebarPanel(numericInput("supp", "Vložte hodnotu support", 0.0001, min = 0.0001, max = 0.8, step = 0.0001),
                        numericInput("conf", "Vložte hodnotu confidence", 0.0001, min = 0.0001, max = 0.8, step = 0.0001)),

и этот код в server.R:

rules.all <- apriori(d, parameter=list(support=input$supp, confidence=input$conf))

library(arulesViz)

output$scatterPlot = renderPlot(
plot(rules.all, method = 'scatterplot')
)

У меня есть эта ошибка: Когда я изменяю значения поддержки и достоверности в numericInput, R Блестящий не отображал график рассеяния. Почему это не сработало? Помоги мне, пожалуйста.

2 ответа

Решение

Из этих нескольких строк кода я вижу, что вы пытаетесь получить доступ к входам из пользовательского интерфейса в нереактивной среде. Это не допускается, и блестящий дает ошибку. Вы должны создать реактивный набор данных (например, rules.all) в котором вы должны разместить

apriori(d, parameter=list(support=input$supp, confidence=input$conf))

Набор данных будет обновляться каждый раз, когда вы взаимодействуете с одним виджетом, и вы можете получить к нему доступ в каждом render* Функция с rules.all()

plot(rules.all(), method = 'scatterplot')

Поскольку вы не предоставили данные, я использовал пример набора данных Groceries из ссылки plot.rules

library(shiny)
library(arulesViz)

ui <- shinyUI(fluidPage(

   titlePanel(""),

     tabsetPanel(
       tabPanel("Experiment 1",
          sidebarPanel(
            # Changed values of the widgets
              numericInput("supp", "Vložte hodnotu support", 0.01, 
                           min = 0.01, max = 0.8, step = 0.01),
              numericInput("conf", "Vložte hodnotu confidence", 0.01, 
                           min = 0.01, max = 0.8, step = 0.01))
      )
     ), 
      mainPanel(
         plotOutput("scatterPlot")
     )
  )
)


server <- shinyServer(function(input, output) {

  ## You can't access inputs from UI in a not reactive environment. 
  ## rules.all <- apriori(d, parameter=list(support=input$supp, confidence=input$conf))

  data("Groceries")

  # Create a reactive dataset which you can access in all render* functions 
  # via rules.all()
  rules.all <- reactive({
    apriori(Groceries, parameter=list(support=input$supp, confidence=input$conf))
  })

  output$scatterPlot = renderPlot({ 
    plot(rules.all(), method = 'scatterplot')
  })
})

shinyApp(ui = ui, server = server)

Спасибо большое... но я должен сделать эти операции за apriori, а затем сделать точечный график на экране:

quality(rules.all) <- round(quality(rules.all), digits=3)

top.support <- sort(rules.all, decreasing = TRUE, na.last = NA, by = "support")rules.sorted = sort(rules.all, by="lift")

subset.matrix = is.subset(rules.sorted, rules.sorted)

subset.matrix[lower.tri(subset.matrix, diag=T)] = NA

redundant = colSums(subset.matrix, na.rm=T) >= 1

rules.pruned = rules.sorted[!redundant]

rules.all = rules.pruned

rules.sorted = sort(rules.all, by="lift") 

rules.all = rules.sorted

(мой набор данных для ввода в apriori называется "d")

что я должен делать с кодом?

Другие вопросы по тегам