我有下面闪亮的应用程序,其中有 3 个文件输入和 2 个操作按钮。
第一个提交按钮“提交”用于触发树形图,第二个“重置”用于重置每个文件输入。
当第一个操作按钮为空时,我会收到一条警告消息。
仅当加载所有文件或加载第一个和第二个文件或仅加载第一个文件时才会显示树。基于此,我创建了一个 if 语句,您可以在第 120 行找到该语句。问题是,虽然应用程序运行良好,但它并没有跟随提交按钮,并且图表会自动显示。如果我只为一种情况运行它,可以说:
jsonedit(jsonlite::fromJSON(SACCR::SACCRCalculator(isolate(input$inFile$datapath),isolate(input$inFile2$datapath),isolate(input$inFile3$datapath), JSON=TRUE)))
它工作正常。所以我认为问题在于 if 语句:
library(shiny)
library(shinyjs)
library(tidyverse)
library(listviewer)
library(jsonlite)
library(SACCR)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
useShinyjs(),
fileInput('inFile', 'Choose 1st file'),
fileInput('inFile2', 'Choose 2nd file'),
fileInput('inFile3', 'Choose 3rd file'),
actionButton('submit', 'Submit'),
tags$hr(),
actionButton('reset', 'Reset')
),
mainPanel(
#This hides the temporary warning messages while the plots are being created
tags$style(type="text/css",
".shiny-output-error { visibility: hidden; }",
".shiny-output-error:before { visibility: hidden; }"
),
uiOutput("choose"),
jsoneditOutput( "choose2" )
)
)
)
server <- function(input, output, session) {
rv <- reactiveValues(
data = NULL,
clear = FALSE
)
rv2 <- reactiveValues(
data = NULL,
clear = FALSE
)
rv3 <- reactiveValues(
data = NULL,
clear = FALSE
)
########1st
observe({
req(input$inFile)
req(!rv$clear)
rv$data <- read.csv(input$inFile$datapath,header = T)
})
observeEvent(input$inFile, {
rv$clear <- FALSE
}, priority = 1000)
observeEvent(input$reset, {
rv$data <- NULL
rv$clear <- TRUE
reset('inFile')
}, priority = 1000)
#############2nd
observe({
req(input$inFile2)
req(!rv2$clear)
rv2$data <- read.csv(input$inFile2$datapath,header = T)
})
observeEvent(input$inFile2, {
rv2$clear <- FALSE
}, priority = 1000)
observeEvent(input$reset, {
rv2$data <- NULL
rv2$clear <- TRUE
reset('inFile2')
}, priority = 1000)
##############3rd
observe({
req(input$inFile3)
req(!rv3$clear)
rv3$data <- read.csv(input$inFile3$datapath,header = T)
})
observeEvent(input$inFile3, {
rv3$clear <- FALSE
}, priority = 1000)
observeEvent(input$reset, {
rv3$data <- NULL
rv3$clear <- TRUE
reset('inFile3')
}, priority = 1000)
output$choose <- renderUI ({
if(is.null(rv$data))
{
"You must upload 1st csv at least"
}
else
{
return(NULL)
}
})
log<-eventReactive({input$submit
input$reset}, {
if(is.null(isolate(rv$data))){
return(NULL)
}
if(!is.null(isolate(rv$data))){
if(!is.null(isolate(rv2$data))&is.null(isolate(rv3$data))){
jsonedit(jsonlite::fromJSON(SACCR::SACCRCalculator(input$inFile$datapath,input$inFile2$datapath, JSON=TRUE)))
}
else if(is.null(isolate(rv2$data))&!is.null(isolate(rv3$data))){
return(NULL)
}
else if(!is.null(isolate(rv2$data))&!is.null(isolate(rv3$data))){
jsonedit(jsonlite::fromJSON(SACCR::SACCRCalculator(input$inFile$datapath,input$inFile2$datapath,input$inFile3$datapath, JSON=TRUE)))
}
else if(is.null(isolate(rv2$data))&is.null(isolate(rv3$data))){
jsonedit(jsonlite::fromJSON(SACCR::SACCRCalculator(input$inFile$datapath, JSON=TRUE)))
}
}
})
output$choose2<-renderJsonedit({
log()
})
}
shinyApp(ui, server)