根据不同的选择选项,以闪亮的方式下载csv

时间:2018-08-13 14:11:34

标签: r csv download shiny shiny-reactivity

我有一个闪亮的应用程序,在其中可以显示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的问题:))

0 个答案:

没有答案