Показать количество графиков на основе количества загруженных файлов в R блестящий - PullRequest
0 голосов
/ 15 апреля 2020

Я довольно новичок в R и Rshiny и пытаюсь создать небольшое приложение со следующими требованиями:

  1. Пользователь может загружать файлы .dbf (в основном таблицы, подключенные к файл .shp). Важное замечание: файлы выходят из базы данных и ВСЕГДА СМОТРИТ ТО ЖЕ ВРЕМЯ с помощью имен столбцов, форматирования и т. Д. c

  2. Пользователь может нажать кнопку Action, которая строит стандартный график для каждого Файл .dbf, который он / она загрузил.

Это не кажется таким сложным. Однако я изо всех сил пытаюсь создать график в пользовательском интерфейсе из для l oop, который читает файлы .dbf и создает графики в для l oop.

Чтобы быть точным, это как далеко Я получил: мое приложение показывает только 1 график (вероятно, так как я получил только 1 plotOutput, определенный в пользовательском интерфейсе ..?), Где я хочу иметь графики для каждого файла .dbf.

Я уже изучал подобные подходы, но не смог сделать работу за меня (как например Динамически создавать графики на основе количества загруженных файлов в Shiny )

Вот скриншот моего ShinyApp, показывающий 1 график вместо 1 графика для каждого загруженный файл.

Снимок экрана с запущенным ShinyApp

Фиктивные данные для воссоздания файла dbf.file:

    dbf.ID dbf.STL_N1TK dbf.TRACKNO
1        1      0.66108           1
2        2      0.41037           1
3        3      0.67624           1
4        4      0.89169           1
5        5      0.90841           1
6        6      0.65887           1
7        7      0.37106           1
8        8      0.29102           1
9        9      0.56361           1
10      10      0.16008           1
11      11      0.59481           1
12      12      0.60862           1
13      13      0.29654           1
14      14      0.64412           1
15      15      0.42292           1
16      16      0.44311           1
17      17      0.44627           1
18      18      0.82052           1
19      19      0.85042           1
20      20      0.38171           1
21      21      0.29971           1
22      22      0.18323           1
23      23      0.05072           1
24      24      0.72445           1
25      25      0.62513           1
26      26      0.59684           1
27      27      0.79869           1
28      28      0.04138           1
29      29     -0.23477           1
30      30     -0.09659           1
31      31     -0.40480           1
32      32      0.05308           1
33      33     -0.61328           1
34      34     -0.52844           1
35      35     -0.54208           1
36      36     -0.27054           1
37      37     -0.61741           1
38      38     -0.78974           1
39      39     -0.98498           1
40      40     -0.75575           1
41      41     -0.98838           1
42      42     -1.08670           1
43      43     -0.90886           1
44      44     -1.01816           1
45      45     -1.15698           1
46      46     -0.76593           1
47      47     -0.91178           1
48      48     -0.86354           1
49      49     -0.09449           1
50      50      0.16952           1
51      51     -0.02130           1
52      52     -0.02288           1
53      53      0.14748           1
54      54      0.12966           1
55      55      0.96503           1
56      56      1.04879           1
57      57      0.67393           1
58      58      1.15019           1
59      59      0.36744           1 

Что я получил до сих пор:

ui:

 ui <- fluidPage(
  #titlePanel(title = div( 
             #img(src = "logoGP.png", width =120, height = 70, style="text-align: right;",
                 #"             Title",))),
  sidebarLayout(
    sidebarPanel(
      h3("Navigation"),
      p("Explain your ShinyApp"),
    br(),
    br(),
    fileInput("dbfs", "upload dbfs", multiple = TRUE), #Fileimport widget

    br(),
    br(),

    actionButton("Button1", "Calculate"), #Action Button

    p("Version"),
    p("?")
    ),

    mainPanel(
      p("Plots"),
      plotOutput("plots"),
    )
  )
) 

И сервер: в качестве трюка я попытался использовать grid.arrange(), чтобы собрать все графики в 1 output$plots, но это не сработало ..

Другой идеей было бы использовать renderUI, но мне не удалось заставить это работать из-за Cairo

Проблемы (подход, который я рассмотрел: Github Link )

server <- function(input, output) {
   observeEvent(input$Button1, { #Bind every action to the Action Button:

     p<- list()

     for (i in nrow(input$dbfs)) {

        local({
         locdat = data.frame(read.dbf(input$dbfs[[i, 'datapath']])) #read in the data that was uploaded

         output$plots <- renderPlot({ #Dummyplot
           p[[i]] <- ggplot(data = locdat, aes(x=dbf.ID, y = locdat$dbf.STL_N1TK))+
             ggtitle(paste("Fahrbahn", locdat$dbf.TRACKNO))+
             geom_point() +
             geom_line() +
             geom_smooth()
           #print(p[[i]])
           p2<- grid.arrange(p[[i]]) #this somehow only creates 1 plot for the last .dbf dataframe of the iteration..
           print(p2)
           })
         })
     }
   })
}

Любая помощь очень ценится !! Заранее спасибо.

Лучший, Тобиас

...