【问题标题】:RShiny - Doesnt display the result sometimesR Shiny - 有时不显示结果
【发布时间】:2019-08-02 20:20:44
【问题描述】:

我正在使用 RShiny 构建一个界面,该界面显示通过 ARULES 包创建的 ARM 规则的结果。它是一个简单的显示应用程序,允许用户选择指标(信心或支持或提升)和要显示的行数(5 或 10 或 15 或 20)。前端是这样的:

后面运行的 R 代码仅按给定的指标排序,并显示在第二个单选按钮中选择的行数。我面临的问题是,当我在第一个单选按钮中选择“支持”时,尽管记录显示在 RStudio 中,但结果在 RShiny 屏幕上变为空白。有时会发生这种情况,因为应用程序有时可以完美运行,尽管结果将在我的 rStudio 上可见,但它不会显示结果。可能是什么原因?

RShiny 代码如下:

ui <- fluidPage(
  titlePanel("Movie Recommendation - ARM"),

  sidebarLayout(
    sidebarPanel(
      helpText("Sort rules based on metric fed in. Include how many rules are needed to be displayed"),

      radioButtons("var", 
                   label = "Choose a metric",
                   choices = c("Confidence","Lift","Support"),
                   selected = "Confidence"),

      radioButtons("range", 
                   label = "Choose Number of rules to display",
                   choices = c(5,10,15,20),
                   selected = 5)
      ),

    #mainPanel(tableOutput("rule"))
    mainPanel(
      tabsetPanel(type = "tabs",
                  tabPanel("Rules",DT::dataTableOutput("rule"))
      )
    )
    )
  )

server <- function(input, output) {

  output$rule <- DT::renderDataTable({
    #output$rule <- reactive({
    #  browser()
    sw <- switch(input$var, 
                 "Confidence" = "confidence",
                 "Lift" = "lift",
                 "Support" = "supp")
    range1 = input$range
    a=sort_rules(sw,range1)
  })
}

# Run app ----
shinyApp(ui, server)

下面的sort_rules(函数)

 sort_rules = function(metric1,k)
    {
      #browser()
      rules <- readRDS("rules.RDa")
      print(paste0("Number of rules read:",length(rules),sep = " "))
      k = as.numeric(k)
      rules_sort <- sort (rules, by=metric1, decreasing=TRUE)
      print(length(rules_sort))
      pl = inspect(head(rules_sort,k))
      return(pl)
    }

我使用“browser()”检查过,上面函数中的“pl”有时显示为空白。但结果显示在 RStudio 中,而不是在 RShiny App 中。

附加信息,以下函数创建rules.RDa

readTran = function(sup,con)
{
  sup = as.numeric(sup)
  con = as.numeric(con)
  data = readRDS("Rules_transaction.RDa")
  rules = arules::apriori(data, parameter = list(supp = sup, conf = con))
  subsetRules <- which(colSums(is.subset(rules, rules)) > 1) # get subset rules in vector
  length(subsetRules)  #> 3913
  rules <- rules[-subsetRules] # remove subset rules. 
  saveRDS(rules,file = "rules.RDa")
}

sup 和 con 分别是 Support 和 Confidence。在从 Rules_transactions.RDa 创建 rules.RDa 时,我使用了 0.1 和 0.7。

Rules_transactions.RDa 数据上传到以下给定的 github 链接: https://github.com/vjkadekar/madeup_data_ARM(纯属捏造数据,此处未使用客户信息)

其 csv 版本作为 my_data.csv 上传到同一链接。

【问题讨论】:

  • 可以分享rules.RDa的部分内容,没有它我们无法复制。
  • 嗨,约翰,我添加了必要的数据。它在我的github上,如果它可以帮助重现问题。问题中包含的 Github 链接
  • 嗨,约翰,我可以解决这个问题。解决方案写在下面。

标签: r shiny shiny-server


【解决方案1】:

我在这里回答我自己的问题。问题出在pl = inspect(head(rules_sort,k))

原来我无法捕获检查语句的输出,只能在 RStudio 面板上查看。

把代码改成这样:

sort_rules = function(metric1,k)
{
  rules <- readRDS("rules.RDa")
  k = as.numeric(k)
  rules_sort <- sort (rules, by=metric1, decreasing=TRUE)
# Removed Inspect in below line and just stored head of the rules as dataframe.
  pl = as(head(rules_sort,k),"data.frame")
  return(pl)
}

这仍然不能解释为什么有时显示在 RShiny 上是可见的,但这可能是改天的问题。

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 2017-09-18
    • 1970-01-01
    • 2019-03-26
    • 2021-12-17
    • 2015-05-04
    • 2014-04-13
    • 2021-08-12
    • 2019-03-06
    相关资源
    最近更新 更多