ggplot2和秤包:参数negative_parens = TRUE不起作用

问题描述 投票:0回答:1

我正在尝试使用scales包来生成复杂表格的格式。以下帮助程序应用了scales包中的label_percent和label_number_si函数。

由于某种原因,negative_parens = TRUE无法产生正确的输出:

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)

尽管设置了negative_parens = TRUE,但我得到了错误的输出:

“-50K”“ -5%”

有人知道为什么参数设置失败吗?

r ggplot2 plot number-formatting
1个回答
0
投票

问题是scales程序包中的其他函数将negative_parens=作为参数,而label_percentlabel_number_si没有。因此,您必须以这种逻辑编写函数:

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循环和substring()来遍历每个项目,并转换以[C0开头的]以括号开头和结尾。效果很好:

"-"
© www.soinside.com 2019 - 2024. All rights reserved.