在運行下面的“縮寫代碼”時,我試圖創建一個檔案上傳驗證,即要上傳的 csv 在 csv 的單元格 A1 和 B1 中必須具有“場景 1”和“場景 1”。否則檔案不會上傳,并被標記為“無效”。關于如何做到這一點的任何想法?
如果您運行以下命令,請單擊單個操作按鈕并通過單擊模式對話框底部的按鈕保存矩陣輸入,查看下載的 csv,并查看單元格 A1 和 B1 如何顯示“場景 1”和“場景 1” "來自下載的矩陣。這很好。如果你洗掉這些,并保存 csv,你會看到這個修改后的 csv 在運行應用程式時仍然可以上傳。我希望這 2 個 csv 欄位用作驗證標志。
我真的很喜歡try()這個應用程式中的全面測驗功能。
縮寫代碼:
library(dplyr)
library(shiny)
library(shinyFeedback)
library(shinyMatrix)
sumMat <- function(x){return(rep(sum(x,na.rm = TRUE), 10))}
ui <- fluidPage(
useShinyFeedback(),
sidebarLayout(
sidebarPanel(
actionButton("matrix3show","Click for matrix input"),
),
mainPanel(plotOutput("plot"))
)
)
server <- function(input, output, session) {
uploadMat3Data <- reactive({
req(input$uploadMat3)
validate(need(identical(tools::file_ext(input$uploadMat3$datapath),"csv"),"Invalid"))
try(read.csv(input$uploadMat3$datapath, header = TRUE))
})
observeEvent(uploadMat3Data(), {
if(is.data.frame(uploadMat3Data())){
updateMatrixInput(session,"matrix3",as.matrix(uploadMat3Data()))
hideFeedback("file")
}
else {showFeedbackWarning("file", "Invalid")}
})
observeEvent(input$matrix3show,{
showModal(
modalDialog(
fileInput(inputId = "uploadMat3",label = NULL,accept = ".csv"),
matrixInput(
inputId = "matrix3",
value = if(is.null(input$matrix3)){matrix(c(1,5),ncol=2,dimnames=list(NULL,rep("Scenario 1",2)))}
else {input$matrix3},
rows = list(extend = TRUE, delete = TRUE),
cols = list(extend = TRUE, delta = 2, delete = TRUE, multiheader = TRUE),
class = "numeric"),
output$verbMat3 <- renderPrint(class(uploadMat3Data())),
footer =
tagList(
downloadButton("saveMat3","Save",style = "width:80px;"),
modalButton("Exit box")
) # close tag list
))
})
observeEvent(input$matrix3, {
tmpMat3 <- input$matrix3
colnames(tmpMat3) <- paste("Scenario",rep(1:ncol(tmpMat3),each=2,length.out=ncol(tmpMat3)))
rownames(tmpMat3) <- paste("Row", seq_len(nrow(input$matrix3)))
updateMatrixInput(session,inputId="matrix3",value=tmpMat3)
})
data <- function(){tibble(X = seq_len(10),Y = sumMat(input$matrix3))}
output$plot<-renderPlot({plot(data(),type="l")})
output$saveMat3 <- downloadHandler(
filename = function(){paste("Inputs","csv",sep=".")},
content = function(file){write.csv(input$matrix3, file,row.names=FALSE)}
)
}
shinyApp(ui, server)
uj5u.com熱心網友回復:
為了解決我將observeEventfor更改為uploadMat3Data()以下內容:
observeEvent(uploadMat3Data(), {
if(is.data.frame(uploadMat3Data())
&& colnames(uploadMat3Data()[1]) == "Scenario.1"
&& colnames(uploadMat3Data()[2]) == "Scenario.1.1"
){
updateMatrixInput(session,"matrix3",as.matrix(uploadMat3Data()))
hideFeedback("uploadMat3")
}
else {showFeedbackWarning("uploadMat3", "Invalid")}
})
請注意&& colnames(...代碼在何處查看上傳資料幀的標頭并檢查所需標頭的位置。還要注意,在原始代碼中,id 參考hideFeedback()和showFeedbackWarning()是不正確的;他們現在更正為“uploadMat3”
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367908.html
