Я создаю панель управления Shiny, которая позволяет пользователю загружать файл и, помимо прочего, выводит на экран выбранные столбцы из загруженного набора данных. Графики, которые я хочу включить, - это гистограмма, диаграмма рассеяния и линейный график. Для построения графиков я использую графическую библиотеку. Это боковое меню от ui.R, где я прошу пользователя загрузить файл
sidebarMenu(
fileInput("file", "Upload your file"),
menuItem("Upload options", tabName = "options", icon = icon("upload"),
menuSubItem(radioButtons("sep", "Separator",
choices = c("Comma" = ",", "Tab" = "\t", "Space" = " ", "Semicolon" = ";"))),
menuSubItem(radioButtons("nas", "Handle missing values",
choices = c("Omit rows with NAs", "Replace with mean", "Replace with median"))),
menuSubItem(checkboxInput("header", "Header", value = TRUE)))
Вот тело панели инструментов от ui.R
dashboardBody(
tabItems(
tabItem(tabName = "summary", verbatimTextOutput("struct")),
tabItem(tabName = "spread", dataTableOutput("table")),
tabItem(tabName = "viz",
fluidRow(
box(title = "Histogram", plotlyOutput("histogram", height = 250)),
box(title = "Line chart"),
box(title = "Scatterplot"),
box(title = "Column selection", uiOutput("inputwidget"))
)),
tabItem(tabName = "about", tableOutput("contents"))
)
Вот часть обработки данных server.R
data <- reactive({
file1 <- input$file
if(is.null(file1)){
return()
} else if(tools::file_ext(file1) == "csv") {
read.csv(file = file1$datapath,
sep = input$sep,
header = input$header,
skipNul = TRUE)
} else if (tools::file_ext(file1) == "xlsx"){
readxl::read_excel(path = file1$datapath)
}
})
columns <- reactive({
names(data())
})
и вот часть, где я хочу создать фактическую гистограмму
output$inputwidget <- renderUI({
selectInput("col", "Select the column", choices = columns())
})
output$histogram <- renderPlotly({
plot_ly(data = data(), x=~data()[input$col], type = "histogram")
})
Когда я запускаю приложение, кажется, что uiOutput и renderUI не работают , Я не получаю выпадающее меню со всеми столбцами, как я ожидал. Я пробовал разные решения для renderPlotly ({}), некоторые из них включали функцию get (), и я получил разные ошибки. Иногда это было: «Неверный первый аргумент», в других случаях это было: «Объект замыкания типа не является подмножеством» и так далее. Я не могу написать все примеры, потому что я действительно не помню, что я пробовал каждый раз. Я искал ответы, но ни один из них не помог мне, потому что все они используют встроенные наборы данных, такие как iris, mtcars или trees, или у них есть более глубокая конкретная проблема c, в которую у меня нет времени.
Кроме того, когда я хочу автоматически завершить ввод $ col, он не распознается, поэтому есть еще одна потенциальная проблема?
Я предполагаю, что моя проблема связана с частью обработки данных на сервере. R, но я Я застрял.
Есть идеи? Спасибо