我试着写一个闪亮的小应用程序,这是我的第一个,所以我不是编程方面的专家。我想上传一个带有fileInput函数的文件。我第一次点击浏览并选择一个文件,我必须按照预期在执行之前点击运行!但是当我选择另一个文件时,程序会自动执行,我不必再次点击运行按钮。我尝试了很多,但我不知道如何解决这个问题,也许这很明显,但我无法看到它。再次点击运行对我来说是必不可少的,因为我使用的功能是巨大的。我在这段代码中用简单的函数简化了它,但我的问题是相同的:数据可以是任何数据帧保存为csv,“。”作为十进制,例如fr<-write.csv(data.frame(name=c(1:5),value=c(1:5)),**file**)
myfunction <- function(Data=matrix(c(2, 4, 3, 1, 5, 7), nrow=3, ncol=2) ){
if(all(Data==matrix(c(2, 4, 3, 1, 5, 7), nrow=3, ncol=2))==TRUE) return(list(name=data.frame(Notice=c("Hello, please load data")),name=data.frame(Notice=c("Hello, please load data")),name=data.frame(Notice=c("Hello, please load data"))))
result=list(Data,Data,Data)
return(result)
}
ui <- fluidPage(
tags$head(tags$style(
HTML('
#sidebar {
background-color: #C3C2F3;
}
body, label, input, button, select {
font-family: "Arial";
}')
)),
titlePanel("Hello"),
sidebarLayout(
sidebarPanel(id="sidebar",
br(),
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
selectInput("dataset", "Choose result:",
choices = c("all matches in interval", "closest matches in interval","no matches")),
helpText("Note: save data with .csv"),
downloadButton('downloadData', 'Download'),
actionButton("go","run",class = "btn-primary")
),
mainPanel(
DT::dataTableOutput('mytable2')
)
)
)
server <- function(input, output) {
library(DT)
library(magrittr)
getData <- reactive({
inFile <- input$file1
if (is.null(input$file1))
return(NULL)
read.csv(inFile$datapath, sep=input$sep,dec=".")
})
observeEvent(input$go,{
result <- reactive({myfunction(getData())})
datasetInput <- reactive({
switch(input$dataset,
"all matches in interval" = result()[[1]],
"closest matches in interval" = result()[[2]],
"no matches" = result()[[3]])
})
output$mytable2 <- DT::renderDataTable({
(DT::datatable(datasetInput(),rownames=FALSE)
%>% formatRound(c(1,2,3),digits=4))
})
output$downloadData <- downloadHandler(
filename = function() {
paste(input$dataset,".csv", sep="")
},
content = function(file) {
write.csv(datasetInput(), file)
})})
}
shinyApp(ui, server)
有人知道我是如何管理它的,再次使用浏览后再用另一个文件,我必须再次点击运行bevore执行吗?
非常感谢!!!
答案 0 :(得分:1)
您可以使用isolate
来避免输入更改时的刷新,并在按下actionButton时执行它,就像在这个小例子中一样:
library(shiny)
shinyApp(ui=fluidPage(textInput("NeedSubmit","NeedSubmit", value="a"),
textInput("DontNeedSubmit","DontNeedSubmit", value="b"),
actionButton("Submit","Submit"),
textOutput("result")),
server=function(input, output){
observeEvent(input$Submit, {
output$result <- renderText(
paste(input$DontNeedSubmit,
isolate(input$NeedSubmit)))
})
})
)