Перекресток в R - почему фильтры не работают? - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь использовать bscols / crosstalk / DT в R для создания двух отдельных наборов данных sharedData для создания отдельных взаимодействий в файле уценки R.

Насколько я могу, Google, похоже,все настроено правильно, и я не получаю никаких сообщений об ошибках.Однако, когда у меня включен HTML и я нажимаю на фильтры, ничего не происходит, поэтому должно быть что-то не так ...

Кроме того, код ниже - я играл с размещением объектов, когда я понял,что фильтры не работают, так что да, действительно, они немного отличаются (если вы ОКР, как я!)

## shipper version ##
## set up data set ##
temp_shipper <- rate_lvl_ship %>%
  subset(
    select = c(
      'OrigName',
      'OrigCity',
      'OrigState',
      'RateCode',
      'RateDesc',
      'Score',
      'Discrepancies',
      'DiscPer',
      'RateCat'
    )
  )
temp_shipper <- temp_shipper[order(-temp_shipper$Score),]
temp_shipper$DiscPer <- paste(
  formatC(
    temp_shipper$DiscPer*100,
    digits = 2,
    format = 'f'
  ) %>% as.character(),
  '%'
)
temp_shipper$Discrepancies <- formatC(
  temp_shipper$Discrepancies,
  digits = 0,
  big.mark = ','
)
temp_shipper$Score <- round(temp_shipper$Score,2)

## set up dataset as a shared dataset for filtering ##
sd_shipper <- SharedData$new(temp_shipper,group='data_subset')

## actual visual in dashboard ##
bscols(
  widths = c(4,4,4),
  device = 'lg',
  list(
    filter_select(
      id = 'origname',
      label = 'Origin Name',
      sharedData = sd_shipper,
      group = ~OrigName,
      multiple = TRUE
    ),
    filter_checkbox(
      id = 'ratecat',
      label = 'Rate Category',
      sharedData = sd_shipper,
      group = ~RateCat,
      allLevels = TRUE,
      inline = TRUE
    )
  ),
  list(
    filter_select(
      id = 'origcity',
      label = 'Origin City',
      sharedData = sd_shipper,
      group = ~OrigCity,
      multiple = TRUE
    ),
    filter_select(
      id = 'ratecode',
      label = 'Rate Code',
      sharedData = sd_shipper,
      group = ~RateCode,
      multiple = TRUE
    )
  ),
  list(
    filter_select(
      id = 'origstate',
      label = 'Origin State',
      sharedData = sd_shipper,
      group = ~OrigState,
      multiple = TRUE
    ),
    filter_select(
      id = 'ratedesc',
      label = 'Rate Description',
      sharedData = sd_shipper,
      group = ~RateDesc,
      multiple = TRUE
    )
  )
)

datatable(
  sd_shipper,
  caption = ' ',
  rownames = FALSE,
  colnames = c(
    'Orig Name',
    'Orig City',
    'OST',
    'Rate Code',
    'Description',
    'Score',
    'Discrepancy Ct',
    '%',
    'RateCate'
  ),
  options = list(
    pageLength = 5,
    columnDefs = list(
      list(className = 'dt-center', targets = c(2:3,5:7)),
      list(visible = FALSE, targets = 8)
    ),
    lengthChange = FALSE,
    searching = FALSE
  )
) %>%
  formatCurrency(
    'Discrepancies',
    currency = '',
    interval = 3,
    mark = ',',
    digits = 0
  )
## receiver version ##
## set up data set ##
temp_receiver <- rate_lvl_recr %>%
  subset(
    select = c(
      'DestName',
      'DestCity',
      'DestState',
      'RateCode',
      'RateDesc',
      'Score',
      'Discrepancies',
      'DiscPer',
      'RateCat'
    )
  )
temp_receiver <- temp_receiver[order(-temp_receiver$Score),]
temp_receiver$DiscPer <- paste(
  formatC(
    temp_receiver$DiscPer*100,
    digits = 2,
    format = 'f'
  ) %>% as.character(),
  '%'
)
temp_receiver$Discrepancies <- formatC(
  temp_receiver$Discrepancies,
  digits = 0,
  big.mark = ','
)
temp_receiver$Score <- round(temp_receiver$Score,2)

## set up dataset as a shared dataset for filtering ##
sd_receiver <- SharedData$new(temp_receiver,group='data_subset1')

## actual visual in dashboard ##
bscols(
  widths = c(3,9),
  device = 'lg',
  list(
    filter_select(
      id = 'destname',
      label = 'Destination Name',
      sharedData = sd_receiver,
      group =~DestName,
      multiple = TRUE
    ),
    filter_select(
      id = 'destcity',
      label = 'Destination City',
      sharedData = sd_receiver,
      group =~DestCity,
      multiple = TRUE
    ),
    filter_select(
      id = 'deststate',
      label = 'Destination State',
      sharedData = sd_receiver,
      group =~DestState,
      multiple = TRUE
    ),
    filter_checkbox(
      id = 'ratecat',
      label = 'Rate Category',
      sharedData = sd_receiver,
      group =~RateCat,
      allLevels = TRUE,
      inline = FALSE
    ),
    filter_select(
      id = 'ratecode',
      label = 'Rate Code',
      sharedData = sd_receiver,
      group =~RateCode,
      multiple = TRUE
    ),
    filter_select(
      id = 'ratedesc',
      label = 'Rate Description',
      sharedData = sd_receiver,
      group =~RateDesc,
      multiple = TRUE
    )
  ),
  datatable(
    sd_receiver,
    caption = 'RECEIVERS',
    rownames = FALSE,
    colnames = c(
      'Dest Name',
      'Dest City',
      'DST',
      'Rate Code',
      'Description',
      'Score',
      'Discrepancy Ct',
      '%',
      'RateCate'
    ),
    options = list(
      pageLength = 10,
      lengthMenu = c(5,10,15,20),
      columnDefs = list(
        list(className = 'dt-center', targets = c(2:3,5:7)),
        list(visible = FALSE, targets = 8)
      ),
      lengthChange = FALSE,
      searching = FALSE
    )
  ) %>%
    formatCurrency(
      'Discrepancies',
      currency = '',
      interval = 3,
      mark = ',',
      digits = 0
    )
)

Как я уже сказал, я не получаю никакой ошибкисообщения, фильтры просто не изменяют свои таблицы данных, как ожидалось.Эти фильтры фактически не фильтруют строки из наборов данных sharedData.то есть, когда я нажимаю флажок в фильтре категории тарифов filter_checkbox, я ожидаю, что «Отображение от 1 до 10 из 1000 записей» в таблице данных изменится на что-то вроде «Отображение от 1 до 10 из 900 записей», и это не так.

...