Я довольно новичок в R и Rshiny и пытаюсь создать небольшое приложение со следующими требованиями:
Пользователь может загружать файлы .dbf (в основном таблицы, подключенные к файл .shp). Важное замечание: файлы выходят из базы данных и ВСЕГДА СМОТРИТ ТО ЖЕ ВРЕМЯ с помощью имен столбцов, форматирования и т. Д. c
Пользователь может нажать кнопку 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)
})
})
}
})
}
Любая помощь очень ценится !! Заранее спасибо.
Лучший, Тобиас