2016-05-03 9 views
1

У меня есть этот код в ui.R:Цифровой вход не работают в априорно в 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 shiny не отобразил график рассеяния. Почему это не сработало? Помогите мне пожалуйста.

ответ

0

Из этих нескольких строк кода я вижу, что вы пытаетесь получить доступ к входам из пользовательского интерфейса в неактивной среде. Это недопустимо, и блестящий дает ошибку. Вы должны создать реактивный набор данных (например 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) 
0

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

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»)

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