R Shiny - Реактивный датафрейм скачать в csv - PullRequest
0 голосов
/ 03 ноября 2018

Я создал приложение, которое позволяет пользователю загружать несколько файлов CSV.

Эти csvs затем 'rbind' вместе, 'read.csv' и имеют добавленный столбец к df, который является именем файла.

Затем обрабатывается df для создания различных графиков, которые можно загрузить. Это работает отлично. Однако, когда я пытаюсь загрузить определенный фрейм данных из реактивного элемента, я не могу заставить его работать.

В этом примере я хочу загрузить df1 из реактивной функции testinput.

Пользовательский интерфейс:

    dashboardPage( skin = "black",
   dashboardHeader(title = "myApp"),
   dashboardSidebar(collapsed = TRUE,
   sidebarMenu(
    menuItem("Home", tabName = "dashboard1", icon = icon("home", lib = 
  "glyphicon"))
    ) 
    ),
   dashboardBody(
     tags$head(tags$style(HTML('
      .main-header .logo {
                          font-family: "Times New Roman", serif;
                          font-weight: bold;
                          font-size: 24px;
                          }
                          '))),

tabItems(
  tabItem(tabName = "dashboard1",
          fileInput("file1",
                    label="Input files:",
                    multiple = TRUE),
          downloadButton('downloadData', 'Download Data')
  )
  )

)
)

Сервер:

     library(shiny)
     library(shinydashboard)

     #server start
     function(input, output) {

       testinput<- reactive({
if(is.null(input$file1))
  return ()
else 
{
  nfiles = nrow(input$file1) 
  csv = list()
  for (i in 1 : nfiles)
  {

    csv[[i]] = read.csv(input$file1$datapath[i])

  }

  csv_names <- input$file1[['name']]
    actual_names<-input$statics$name
  df1<-cbind(actual_names, csv_names)
  mydata <- do.call(rbind, lapply(csv_names, function(x) cbind(read.csv(x), name=strsplit(x,'\\.')[[1]][1])))
    df1<-cbind(df1, mydata)    
  }
   })

     output$downloadData <- downloadHandler(
filename = function() { paste(input$downloadData, " ",Sys.Date(),".csv",sep="") },
content = function(file) {
  write.csv(df1,file)
}
    )

 )


   }

Любая помощь была бы великолепна, так как я искал много SO и других форумов, и я довольно застрял.

1 Ответ

0 голосов
/ 03 ноября 2018

@ Чабо был прав:

Мне пришлось создать новый реактивный (), а затем визуализировать в качестве вывода $ для моего пользовательского интерфейса.

Я мог бы тогда загрузить реактивное событие

...