我有一个闪亮的应用程序,在其中可以显示2个不同的数据框,选择其中之一,选择日期范围,选择3个不同的参数,然后得到3个参数图。这很好。
现在我想将选定的数据下载为csv,这意味着我想要具有3个选定参数和仅选定日期范围的csv。
我首先根据用于绘图的数据框,使用if和else函数创建文件,但这是行不通的。
library(shiny)
library(ggplot2)
library(pbapply)
library(plyr)
library(sp)
library(gridExtra)
library(svDialogs)
library(plotly)
library(reshape2)
library(gridExtra)
library(purrr)
load("M:/shiny/PU29_Data_Zwischenstand.RData")
load("M:/shiny/PU29_Data_Zwischenstand_median.RData")
shinyUI(fluidPage(
fluidPage(
column(3,offset = 4, titlePanel("Pilotanlage Petronell"))
),
fluidRow(
column(12,
sidebarLayout(position = "right",
sidebarPanel(
fluidRow(
column(12,
fluidRow(
column(12,
dateRangeInput("dates", label = h3("Datum"),start="2018-07-04",end="2018-07-05"),
selectInput("Plot_1", label = h3("Parameter 1"),
choices = list("log cycle feed" = "1", "turbidity feed" = "2",
"pH feed 002" = "3", "level feed tank" = "4", StATUS_feed" = "5", "flow_rate_feed" = "6", "temperature_feed" = "7"
#### and so on until parameter 21 and for plot 2 and 3
, selected = 1),
selectInput("data", label = h3("Datei"),
choices = list("PU29 Data Zwischenstand" = "normal",
"PU29 Data Zwischenstand median" = "median"), selected = "median"),
downloadLink("PU29_Download", "Download"),
actionButton("go_for_it","Plot"),
fluidRow(column(4, verbatimTextOutput("value"))
) ) )))),
mainPanel( tabPanel("Plot",
(plotlyOutput("plot1",height="350px", width = "100%")),
(plotlyOutput("plot2",height="350px", width = "100%")),
(plotlyOutput("plot3",height="350px", width = "100%")))))
)) ))
shinyServer(function(input, output) {
output$plot1 <- renderPlotly({ ### this exists for plot 2 and 3 as well
if(input$go_for_it == 0) return()
dates <- as.character(seq(as.Date(input$dates[1]),
as.Date(input$dates[2]),"days"))
if(input$data=="normal" & input$Plot_1=="1")
{
ly_tcc <- plot_ly(PU29_Data_Zwischenstand[grepl("log_cycle_feed",
PU29_Data_Zwischenstand$parameter),],x= ~datetime,y= ~value,height= 900, type="scatter",mode="lines+markers",
marker=list(size=2,color="blue"),line=list(color=alpha("blue",0.2))) %>%
layout(xaxis=list(title="Datum",tickformat="%Y-%m-%d"),
yaxis=list(title="log cycle feed",exponentformat="none",tickformat="."),
showlegend=F)
}
if(input$data=="median" & input$Plot_1=="1")
{
ly_tcc <- plot_ly(PU29_Data_Zwischenstand_median[grepl("log_cycle_feed",
PU29_Data_Zwischenstand_median$parameter),],x= ~datetime,y= ~value,height= 900, type="scatter",mode="lines+markers",
marker=list(size=2,color="blue"),line=list(color=alpha("blue",0.2))) %>%
layout(xaxis=list(title="Datum",tickformat="%Y-%m-%d"),
yaxis=list(title="log cycle feed",exponentformat="none",tickformat="."),
showlegend=F)
}
subplot(ly_tcc,nrows=3,titleX=T,titleY=T,widths = 0.9,shareX = T)
})
我还有20个参数,还有2个图。我不知道您如何将它简化成一个简短的形式,所以我重复了代码,更改了数字。但是我怎么说,到现在为止仍然有效。
reactive(
if(input$data=="median")
{
table <- data.frame(PU29_Data_Zwischenstand_median)
} else {
table <- data.frame(PU29_Data_Zwischenstand)
})
所以我的想法是,“ if函数”在情节中可以很好地工作,因此下载也可以工作。
output$PU29_Download <- downloadHandler(
filename = function() {
paste("", Sys.Date(), ".csv", sep="")
},
content = function(file) {
write.csv(table, file)
} ) } )
但是我得到的结果是一个几乎为空的csv文件,它仅包含“,“ x”“。 而且,如果我在尝试创建表的代码中进行了某些更改,则csv中没有可见的更改,或者是错误代码。
所以我的问题是:基于设置“ median”,如何获取csv?如果我在应用中选择了中间文件,则应该可以下载“ PU29_Data_Zwischenstand_median”文件,如果没有,则可以下载另一个文件。
后来我想,csv不包含我使用的文件的所有信息,而仅包含3个图中显示的数据。表示日期范围和3个参数。
非常感谢您的帮助,请不要过多地评价我的代码,这对R来说还很陌生(为此,我自己解决了Shiny的问题:))