@ camille, спасибо за ссылку на дробный пакет
Ниже приведена функция, которую я изменил, чтобы она работала для этой проблемы
library(tidyverse)
decmls <- c(0.155351347,0.04003669,0.005442423,0.000727562,3.37797e-05)
prettyFractions <- function(x = NULL, smbl ="", signif = 3){
humanity <- function(y){
# y <- t$estPcnt
if (!is.na(y)){
d <- signif(y, digits = 3) %/% 1e-1
c <- signif(y, digits = 3) %/% 1e-2
m <- signif(y, digits = 3) %/% 1e-3
m1 <- signif(y, digits = 3) %/% 1e-4
m2 <- signif(y, digits = 3) %/% 1e-5
if ( y >= 0 ){
y_is_positive <- ""
} else {
y_is_positive <- "-"
}
if ( between(d, 1, 10) ) {
paste0( y_is_positive, smbl
,fractional::fractional(y, eps = 1e-02, maxConv = 20, sync = TRUE))
} else if ( between(c, 1, 10)){
paste0( y_is_positive, smbl
,fractional::fractional(y, eps = 1e-03, maxConv = 20, sync = TRUE))
} else if ( between(m, 1, 10)){
paste0( y_is_positive, smbl
,fractional::fractional(y, eps = 1e-04, maxConv = 20, sync = TRUE))
}else if( between(m1, 1, 10)){
paste0( y_is_positive, smbl
,fractional::fractional(y, eps = 1e-06, maxConv = 20, sync = TRUE))
} else {
paste0( y_is_positive, smbl
,fractional::fractional(y, eps = 1e-09, maxConv = 20, sync = TRUE))
}
} else if (is.na(y) | is.null(y)){
"-"
}
}
sapply(x, humanity)
}
options("scipen"=100, "digits"=4)
cbind(decmls
, Excel_Fractions
, prettyFracs = prettyFractions(decmls)
, diff = sapply(Excel_Fractions, function(x) eval(parse(text=x)))
- sapply(prettyFractions(decmls), function(x) eval(parse(text=x))))
decmls Excel_Fractions prettyFracs diff
1/6 "0.155351347" "1/6" "2/13" "0.0128205128205128"
1/25 "0.04003669" "1/25" "1/25" "0"
4/735 "0.005442423" "4/735" "1/183" "-0.0000223040035686409"
2/2749 "0.000727562" "2/2749" "1/1374" "-0.000000264751559783845"
3/88811 "0.0000337797" "3/88811" "1/29603" "-0.000000000760724687222706"