R блестящий - последний нажатый идентификатор кнопки внутри блестящего модуля

dplyr с 0,4 реализовал все те объединения, в том числе external_join, но стоит отметить, что для первых нескольких релизов он использовал не для того, чтобы предлагать внешний_join, и в результате было много действительно плохой взломанный обходной код пользователя, плавающий вокруг (вы все еще можете найти это в ответах SO и Kaggle с того периода).

Основные моменты выделения :

v0.5 (6/2016)

  • Обработка для типа POSIXct, часовых поясов, дубликатов, разных уровней факторов. Более эффективные ошибки и предупреждения.
  • Новый аргумент суффикса для управления тем, какие суффиксные имена дублированных переменных получают (# 1296)

v0.4.0 (1/2015)

  • Внедрить правое соединение и внешнее соединение (# 96)
  • Мутирующие объединения, которые добавляют новые переменные в одну таблицу из совпадающих строк в другой. Фильтрация соединений, которые фильтруют наблюдения из одной таблицы на основе того, соответствуют ли они наблюдению в другой таблице.

v0.3 (10/2014)

  • Теперь можно оставить left_join разными переменными в каждой таблице: df1%>% left_join (df2, c ("var1" = "var2"))

v0.2 (5/2014)

  • * _ join () больше не переупорядочивает имена колонок (# 324)

v0.1.3 (4/2014)

Обходные решения для комментариев хайли в этой проблеме:

  • right_join (x, y) совпадает с left_join (y, x) в терминов строк, только столбцы будут разными порядками.
  • external_join - это в основном union (left_join (x, y), right_join (x, y)) - то есть сохранить все строки в обоих кадрах данных.

1
задан amycookie 24 March 2019 в 03:42
поделиться

1 ответ

Вы были почти у цели, но были небольшие проблемы с форматированием. Обновленный код указан ниже.

Вы в основном неправильно использовали HTML (я изменил его на JS, но это не проблема) так, как вы просто запятую отделяли ns("last_btn"). Если бы вы проверили вывод вашей исходной инструкции HTML(...), вы бы увидели, что результирующая строка JavaScript была

Shiny.onInputChange(' link_id-last_btn ', this.id);

И я имею в виду пробелы вокруг входного идентификатора. Из-за лишних пробелов входные данные не были правильно отображены в input$last_btn. Я использовал paste0 в своем примере, чтобы правильно склеить нити.

Во-вторых, есть некоторые пропущенные ns вызовы, которые я исправил, но вы наверняка узнали бы сами, как только блокировщик ввода исчезнет.

user_inputUI <- function(id){
  # Create a namespace function using the provided id
  ns <- NS(id)

  tagList(
    tags$head(
      tags$script(
        JS(paste0("$(document).on('click', '.needed', function () {debugger;
           Shiny.onInputChange('", ns("last_btn"), "', this.id);
        });"))
      )
    ),
    tags$span(HTML(paste0('<div><input id="', ns("first"), '" type="checkbox" class="needed"></div>'))),
    actionButton(ns("second"), "Second", class="needed"),
    actionButton(ns("third"), "Third", class="needed"),
    actionButton(ns("save"), "save"),
    selectInput(ns("which_"), "which_", c(ns("first"), ns("second"), ns("third")))
    )
}

update_options <- function(input, output, session) {

  observeEvent(input$last_btn, {
    print(input$last_btn)
  })

  observeEvent(input$save, {
    updateSelectInput(session, "which_", selected = input$last_btn)
  })

  return(reactive(input$last_btn))
}

ui <- shinyUI(fluidPage(

  titlePanel("Track last clicked Action button"),


  sidebarLayout(
    sidebarPanel(
      user_inputUI("link_id")
    ),

    mainPanel(

      textOutput("lastButtonCliked")
    )
  )
))


server <- shinyServer(function(input, output,session) {

  last_id <- callModule(update_options, "link_id")
  output$lastButtonCliked=renderText({last_id()})

})


# Run the application 
shinyApp(ui = ui, server = server)
0
ответ дан K. Rohde 24 March 2019 в 03:42
поделиться
Другие вопросы по тегам:

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