ggplot2 и масштабирует пакет: параметр absolute_parens = TRUE не работает - PullRequest
0 голосов
/ 03 мая 2020

Я пытался использовать пакет scale для форматирования сложной таблицы. Следующий помощник применяет функции label_percent и label_number_si из пакета весов.

Почему-то отрицательный_парень = ИСТИНА не выдает правильный вывод:

prettify_numbers_as_percent <- function(x){   
lapply(as.list(as.numeric(x)),label_percent(accuracy = 1,  suffix = "%", negative_parens = TRUE, sep = " ")) %>%

    unlist() %>%
    return() }



prettify_numbers_as_si <- function(x){
  lapply(as.list(as.numeric(x)), label_number_si(accuracy = 1,  negative_parens = TRUE, sep = " ")) %>%
    unlist() %>%
    return()
}

Когда я запускаю

prettify_numbers_as_si(50000) 
prettify_numbers_as_percent(0.05)

, я получаю ожидаемый вывод:

"50K"
"5%"

Когда я запускаю

prettify_numbers_as_si(-50000) 
prettify_numbers_as_percent(-0.05)

, я получаю неправильный вывод, несмотря на то, что absolute_parens = TRUE установлено:

"- 50K"
"-5%"

Кто-нибудь знает, почему настройка параметров не выполняется?

1 Ответ

1 голос
/ 03 мая 2020

Проблема в том, что в то время как другие функции в пакете scales имеют negative_parens= в качестве аргументов, label_percent и label_number_si не имеют. Следовательно, вы должны написать в этом логе c своим функциям:

new_percent <- function(x){
  perc <- lapply(
    as.list(as.numeric(x)),
    label_percent(
      accuracy=1, suffix = '%', sep=' '
    )
  ) %>%
  unlist()

  for(i in 1:length(perc)){
    if(substring(perc[i],1,1)=='-'){
      perc[i] <- paste0('(',substring(perc[i],2),')')
    }
  }
  return(perc)
}

new_numbers <- function(x){
  nums <- lapply(
    as.list(as.numeric(x)),
    label_number_si(
      accuracy = 1,  sep = " "
    )
  ) %>%
  unlist()
  for(i in 1:length(nums)){
    if (substring(nums[i],1,1)=='-'){
      nums[i] <- paste0('(',substring(nums[i],2),')')
    }
  }
  return(nums)
}

Поскольку вы знаете, что каждое значение в вашем возвращении, которое должно быть в скобках, будет начинаться с "-", я используя for l oop и substring() для перебора каждого элемента и преобразования тех, которые начинаются с "-", чтобы начинаться и заканчиваться скобками. Работает довольно хорошо:

test_perc <- c(-0.5, -0.05, 1.2, .23, -0.13)
test_nums <- c(6000,-60000, 74000, -56000000)

> new_percent(test_perc)
[1] "(50%)" "(5%)"  "120%"  "23%"   "(13%)"
> new_numbers(test_nums)
[1] "6K"    "(60K)" "74K"   "(56M)"
...