Существует опечатка: output$Table
должно быть output$table
для ссылки на таблицу, а не на вкладку, в которой она находится.Кроме того, чтобы загрузить файл из fileInput
, вам необходимо получить доступ к input$PE$datapath
. Я бы структурировал это, используя eventReactive
, который вызывается actionButton
, для загрузкиданные и сделать их доступными в качестве реактивного выражения, которое используется renderTable
server <- function(input, output, session) {
# When button is pressed, load data and make available as reactive expression
table_content <- eventReactive(input$Start, {
req(input$PE$datapath)
a <- read.delim(input$PE$datapath,sep="\t",header=T)
b <- a[a[,6]==2,1]
return(b)
})
# Render data as table
# Since table_content is reactive, the table will update when table_content changes
output$table <- renderTable({
table_content()
})
}
Чтобы загрузить таблицу, вы можете просто настроить функцию downloadHandler
с таким же выражением table_content()
, каксодержание.На downloadHandler
есть куча других вопросов, поэтому я не буду вдаваться в подробности.
Если вы хотите, чтобы кнопка input$Start
при нажатии переключалась на вкладку результатов, вынужно сделать 2 вещи:
Во-первых, добавить идентификатор к вашему sidebarMenu
:
sidebar <- dashboardSidebar(
sidebarMenu(id = 'tabs',
...
Во-вторых, настроить updateTabItems
, чтобы изменить выбранную вкладку на results
.Поскольку вы используете shinydashboard
, вы хотите использовать shinydashboard::updateTabItems
, а не shiny:: updateTabsetPanel
, как в этот вопрос .Поскольку вы хотите изменить вкладки при загрузке содержимого таблицы, я бы сделал table_content()
реактивный триггер, добавив следующее:
observeEvent(table_content(),{
updateTabItems(session, "tabs", 'results')
})
Теперь, когда table_content()
изменяется, вкладка будетпереключился на results
.Если в вашем eventReactive
что-то пошло не так и файл не может быть прочитан или обработан должным образом, вкладка не переключится.