我正在尝试使用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%”
有人知道为什么参数设置失败吗?
问题是scales
程序包中的其他函数将negative_parens=
作为参数,而label_percent
和label_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开头的]以括号开头和结尾。效果很好:
"-"