Страница посадки в блестящем приложении [дубликат]

Рассмотрим следующие файлы данных

TableA = pd.DataFrame(np.random.rand(4, 3),
                      pd.Index(list('abcd'), name='Key'),
                      ['A', 'B', 'C']).reset_index()
TableB = pd.DataFrame(np.random.rand(4, 3),
                      pd.Index(list('aecf'), name='Key'),
                      ['A', 'B', 'C']).reset_index()

TableA


TableB

Это один из способов сделать то, что вы хотите

Способ 1

# Identify what values are in TableB and not in TableA
key_diff = set(TableB.Key).difference(TableA.Key)
where_diff = TableB.Key.isin(key_diff)

# Slice TableB accordingly and append to TableA
TableA.append(TableB[where_diff], ignore_index=True)

Метод 2

rows = []
for i, row in TableB.iterrows():
    if row.Key not in TableA.Key.values:
        rows.append(row)

pd.concat([TableA.T] + rows, axis=1).T

Сроки

4 строки с 2 перекрытиями

Метод 1 намного быстрее

10 000 строк 5 000 перекрытий

петли плохие

7
задан SprengMeister 19 October 2016 в 19:19
поделиться

1 ответ

Это немного взломанный, но вы можете использовать модальный диалог для тиражирования целевой страницы.

В основном, используйте встроенную команду showModal(modalDialog()) Shiny, чтобы панель всплывала над приложением. Модаль создается в observeEvent() в server.R, который запускается ровно один раз, когда приложение запускается. Пользовательский CSS включен в скрипт ui.R, который заставляет модальный охватить всю страницу. Вот приложение:

ui.R

library(shinydashboard)


ui <- dashboardPage(

  dashboardHeader(title = "Basic dashboard"),
  ## ui.R ##

  dashboardSidebar(
    sidebarMenu(
      menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
      menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )
  ),

  dashboardBody(

    tags$head(tags$style(HTML('
      .modal.in .modal-dialog{
        width:100%;
        height:100%;
        margin:0px;
      }

      .modal-content{
        width:100%;
        height:100%;
      }
    '))),

    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
        fluidRow(
          box(plotOutput("plot1", height = 250)),

          box(
            title = "Controls",
            sliderInput("slider", "Number of observations:", 1, 100, 50)
          )
        )
      ),

      # Second tab content
      tabItem(tabName = "widgets",
        h2("Widgets tab content")
      )
    )
  )
)

server.R

library(shiny)
library(shinydashboard)

server <- function(input, output) {
  set.seed(122)
  histdata <- rnorm(500)

  observeEvent(once = TRUE,ignoreNULL = FALSE, ignoreInit = FALSE, eventExpr = histdata, { 
    # event will be called when histdata changes, which only happens once, when it is initially calculated
    showModal(modalDialog(
      title = "Landing Page", 
      h1('Landing Page'),
      p('Theoretically you can put whatever content you want in here')
    ))
  })

  output$plot1 <- renderPlot({
    data <- histdata[seq_len(input$slider)]
    hist(data)
  })
}

Несколько предостережений:

  • CSS изменяет каждый модальный диалог в приложении, поэтому вам нужно будет добавить определенные классы к этому первому модальному моменту, чтобы все модалы не были полноэкранными. Модальная техническая загрузка после загрузки пользовательского интерфейса, поэтому есть короткая секунда, когда пользователь может видеть приложение в фоновом режиме.

Я полагаю, что вы сможете исправить последнее, ища событие, соответствующее серверу, загружающему приложение, но, к сожалению, я не знаком с каким-либо таким событием.

2
ответ дан thisislammers 19 August 2018 в 13:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: