Проблема в том, что в то время как другие функции в пакете 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)"