Filter 闪亮-无功过滤器功能问题

Filter 闪亮-无功过滤器功能问题,filter,shiny,xlsx,reactive,Filter,Shiny,Xlsx,Reactive,希望有人能帮助解决这个棘手的问题:闪亮的应用程序与Excel模板完美结合,但当用户加载新文件并刷新计算时,会出现以下错误: Warning: Unknown or uninitialised column: `Distribution`. Warning: Unknown or uninitialised column: `Distribution`. Warning: Unknown or uninitialised column: `Distribution`. Warning: Error

希望有人能帮助解决这个棘手的问题:闪亮的应用程序与Excel模板完美结合,但当用户加载新文件并刷新计算时,会出现以下错误:

Warning: Unknown or uninitialised column: `Distribution`.
Warning: Unknown or uninitialised column: `Distribution`.
Warning: Unknown or uninitialised column: `Distribution`.
Warning: Error in : Problem with `filter()` input `..1`.
x Input `..1` must be of size 3 or 1, not size 0.
i Input `..1` is `!is.na(rv$RRDTRaw$Likelihood) & !is.na(rv$RRDTRaw$Distribution)`.
  59: <Anonymous>
警告:未知或未初始化的列:`Distribution`。
警告:未知或未初始化的列:`Distribution`。
警告:未知或未初始化的列:`Distribution`。
警告:中出错:`filter()`input`..1`有问题。
x输入“…1”的大小必须为3或1,而不是0。
我输入的“…1”是”!is.na(rv$RRDTRaw$可能性)&!is.na(rv$RRDTRaw$Distribution)`。
59: 
此问题仅在代码中最后一个带有过滤函数的“观察”函数处于激活状态时显示。如果我发表评论,问题就不存在了。 请参见下面的代码:

## LIBRARIES
        library(tidyverse)
        library(stats)
        library(data.table)
        library(triangle)
        library(base)
        library(matrixStats)
        library(ggplot2)
        library(ggthemes)
        library(readxl)
        library(httr)
        library(shiny)

## DEFINITIONS

    vQuantiles <- c(P00 = 0, P05 = .05, P50 = .50, P80 = .80, P95 = .95, P100 = 1)
        vtQuantiles <- names(vQuantiles)

    MCScenarioTotals <- list()
    MCTotalsQuantiles <- list()
    MCRecordsQuantiles <- list()
    MCRecordsQuantilesTop10 <- list()

## LOAD RR TEMPLATES

    ExcelTemplate <- tempfile(fileext = ".xlsx")
    GET(url = "https://www.openmontecarlo.com/SampleS.xlsx",write_disk(ExcelTemplate))
    defaultRR <- read_excel(ExcelTemplate)

## DEFINE UI

ui <-

fluidPage(
    hr(),
    h1("Monte Carlo Simulation",align = "center"),

    fluidRow(
        hr(),
        column(3,
            checkboxGroupInput("ISvModels", label = h3("Step 1:",br(),"Select which Models to Run"), 
            choices = list(
            "100 Scenarios" = 100,
            "1000 Scenarios" = 1000,
            "5000 Scenarios" = 5000,
            "10000 Scenarios" = 10000),
            selected = 100),offset = 1
        ),

        column(7,
            selectInput("templateSelection",h3("Step 2:",br(),"Select an existing Risk Register sample"),
                c(1,2,3,4),selected = 3,multiple = FALSE,selectize = TRUE,width = NULL,size = NULL),
            
            fileInput("userExcel", h3("Or upload your own Risk Register"),accept = ".xlsx"),
            offset = 1,
        ),
    ),
    hr(),

    fluidRow(
        column(5,
            h3("Step 3: Click to run the models"),
            offset = 1,
        ),

        column(6,
            br(),
            actionButton(inputId = "Refresh", label = "Run Simulation",
            ),
            offset = 0,
        ),
    ),
    hr(),

    mainPanel(  

        h3(strong("Risk Register - Imported Data")),
        br(),
        dataTableOutput("SRRImport"),

        h3(strong("Risk Register - Raw Data")),
        br(),
        dataTableOutput("SRRDTRaw"),

        h3(strong("Risk Register - Invalid Likelihood Data")),
        br(),
        dataTableOutput("SLikelihoodQADrop"),

        h3(strong("Risk Register - Invalid Impact Data")),
        br(),
        dataTableOutput("SImpactQADrop"),

        h3(strong("Risk Register - Valid Data")),
        br(),
        dataTableOutput("SRRDT"),

    )
)

server <- function(input, output) {

## CREATE DEFAULT RR AND REACTIVE VARIABLES

rv <- reactiveValues(
    inputRR = tempfile(fileext = ".xlsx"),
    inputPath = NULL,
    vModels = c(100),
    RRImport = defaultRR,
    RRuserExcel = data.frame(),
    RRDTRaw = data.frame(),
    LikelihoodQADrop = data.frame(),
    ImpactQADrop = data.frame(),
    RRDT = data.frame(),
    nDrop = 0,
    nRisks = 1,
    RRDTLong = data.frame()
    )

# SHINY INPUT REFRESH

    observeEvent(input$Refresh,{if (is.null(input$userExcel)) {rv$RRImport <- defaultRR}
        else {
        rv$inputPath <- input$userExcel
        output$SinputPath <- renderPrint({rv$inputPath[,4]})
        rv$inputRR <- read_excel(paste0(rv$inputPath[,4]))
        rv$RRImport <- rv$inputRR
        }
    })

# data.frame(suppressWarnings(

    output$SRRImport <- renderDataTable({rv$RRImport})

    observe({rv$nRisksImported <- nrow(rv$RRImport)})
        output$SnRisksImported <- renderPrint({rv$nRisksImported})

## PROCESS MODELS INPUT

    observeEvent(input$Refresh,{rv$vModels <- as.numeric(unlist(input$ISvModels))})
        output$vModelsText <- renderPrint({unlist(rv$vModels)})

    qtModels <- reactive({length(unlist(rv$vModels))})
        output$qtModelsText <- renderPrint({unlist(qtModels())})

    vtModels <- reactive({paste0("M",1:qtModels()," n = ",rv$vModels," scenarios")})
        output$vtModelsText <- renderPrint({unlist(vtModels())})

## RR RAW

    observe({rv$RRDTRaw <- rv$RRImport})
    observe({rv$RRDTRaw$Likelihood <- suppressWarnings(as.numeric(rv$RRDTRaw$Likelihood))})
    observe({rv$RRDTRaw$Min <- suppressWarnings(as.numeric(rv$RRDTRaw$Min))})
    observe({rv$RRDTRaw$ML <- suppressWarnings(as.numeric(rv$RRDTRaw$ML))})
    observe({rv$RRDTRaw$Max <- suppressWarnings(as.numeric(rv$RRDTRaw$Max))})
      
## QUALITY CHECK LIKELIHOOD

    observe({rv$RRDTRaw$Likelihood <- ifelse (rv$RRDTRaw$Likelihood <=0 | rv$RRDTRaw$Likelihood >=100,NA,rv$RRDTRaw$Likelihood)})

    observe({rv$LikelihoodQADrop <- rv$RRImport[which(is.na(rv$RRDTRaw$Likelihood)),]})
        output$SLikelihoodQADrop <- renderDataTable({rv$LikelihoodQADrop})

## CLASSIFY AND QUALITY CHECK DISTRIBUTIONS

    observe({rv$RRDTRaw <- mutate(rv$RRDTRaw,Distribution = case_when(is.na(rv$RRDTRaw$Min) & is.na(rv$RRDTRaw$Max) & !is.na(rv$RRDTRaw$ML) ~ "Single Point",
                                        is.na(rv$RRDTRaw$ML) & !is.na(rv$RRDTRaw$Min) & !is.na(rv$RRDTRaw$Max) & rv$RRDTRaw$Min<rv$RRDTRaw$Max ~ "Uniform",
                                        !is.na(rv$RRDTRaw$Min) & !is.na(rv$RRDTRaw$Max) & !is.na(rv$RRDTRaw$ML) & rv$RRDTRaw$Min<rv$RRDTRaw$ML & rv$RRDTRaw$ML<rv$RRDTRaw$Max ~ "3 Points"))
            })
        output$SRRDTRaw <- renderDataTable({rv$RRDTRaw})

    observe({rv$ImpactQADrop <- rv$RRImport[which(is.na(rv$RRDTRaw$Distribution)),]})
        output$SImpactQADrop <- renderDataTable({rv$ImpactQADrop})

## DROP + DECLARE NAs AND PROCEED + PRINT THE RISK REGISTER

    observe({rv$RRDT <- filter(rv$RRDTRaw, !is.na(rv$RRDTRaw$Likelihood) & !is.na(rv$RRDTRaw$Distribution))})

}

# Run the app ----
shinyApp(ui = ui, server = server)
##库
图书馆(tidyverse)
图书馆(统计)
库(数据表)
图书馆(三角形)
图书馆(基地)
图书馆(matrixStats)
图书馆(GG2)
图书馆(主题)
图书馆(readxl)
图书馆(httr)
图书馆(闪亮)
##定义

vQuantiles您的
read\u excel
不适用于用户输入文件,因为它只是一个路径。如下图所示,尝试读取

observeEvent(input$Refresh,{if (is.null(input$userExcel)) {rv$RRImport <- defaultRR}
    else {
      inFile <- input$userExcel
      rv$inputPath <- inFile
      output$SinputPath <- renderPrint({rv$inputPath[,4]})
      #rv$inputRR <- read_excel(paste0(rv$inputPath[,4]))
      rv$inputRR <- read_xlsx(inFile$datapath, sheet =  1)
      rv$RRImport <- rv$inputRR
    }
  })

observeEvent(输入$Refresh,{if(is.null(输入$userExcel)){rv$RRImport Try
dplyr::filter(…)
在上一篇文章中,您可能已经从其他软件包中进行了筛选。您好@YBS。这是一个非常好的调用,谢谢!不幸的是,我仍然遇到相同的情况:它与最初加载的Excel文件运行得非常好,但在上载新文件并单击“运行”后,即使上载了相同的模板Excel文件,我也会收到错误消息。这是怎么回事有可能吗???嘿,再次感谢你的建议。相信我,我尝试了各种解决方法,将单独的if函数和其他逻辑运算符更改为is.na、!is.na…还尝试将筛选函数替换为“complete.cases”和“which”但两者都给出了完全相同的错误消息。似乎问题的根源在于创建带有mutate的分发列,以及此“未初始化”的任何含义列生成,这似乎是Shiny的一个常见问题,尤其是在使用mutate时。因为它只发生在用户输入文件中,我还认为我的反应值声明中可能会有一些错误,但我花了很多时间尝试不同的方法,它们都适用于模板文件,但与用户输入文件Hi YBS中断,再次是t谢谢你的关注!我试过这个,它和reas_excel有相同的问题:当加载模板文件时,这两个函数都起作用,当用户输入文件加载相同的消息时,这两个函数都会中断:x input
。1
的大小必须是3或1,而不是0。我非常确定它在操作data.frame的筛选函数中,因为我f I comment这一切都很好,两个文件都被上传和处理到了应该应用过滤器的地方。不过,最好再尝试一件事,确保它运行正常。再次感谢!使用
dplyr::filter(…)
read_xlsx
,它对我来说很好。我刚刚下载了与你自动加载的相同的文件,并将其用作用户文件。伙计,我刚刚在服务器上运行了它,它工作了!!!很高兴现在继续使用我的代码。我的RStudio中的某些内容仍在崩溃,我将重新安装它。也感谢你检查并让我这么做我知道这很管用。我无法告诉你这有多棒,非常感谢你关注这部电影!!!祝你一切顺利!很高兴能帮上忙!!!