prp <- function(val, digits = 3){ if(round(suppressWarnings(as.numeric(val)), digits = digits)<0.001 || stringr::str_detect(x, "0.001")){ p <- "<0.01" }else{ p <- round(as.numeric(val), digits = digits) } result <- character(length(val)) # Valores NA na_idx <- is.na(val) result[na_idx] <- NA_character_ # Valores válidos valid_idx <- !na_idx valid_vals <- val[valid_idx] # Redondear valfor <- round(valid_vals, digits = digits) # Identificar cuáles necesitan notación científica needs_sci <- (valfor == 0 & valid_vals != 0) # Valores que se pueden representar normalmente result[valid_idx][!needs_sci] <- format(valfor[!needs_sci], nsmall = 0, scientific = FALSE ) # Valores que necesitan notación científica if (any(needs_sci)) { sci_vals <- valid_vals[needs_sci] # Calcular exponente estándar exp_val <- floor(log10(abs(sci_vals))) # Ajustar exponente para mantener mantisa como 0.0X... exp_ajustado <- exp_val + mantisa_digits # Calcular mantisa ajustada mantisa <- sci_vals / (10^exp_ajustado) mantisa_redondeada <- round(mantisa, digits = digits) result[valid_idx][needs_sci] <- sprintf( "%.*fx10^%d", digits, mantisa_redondeada, exp_ajustado ) } result } # funcp <- function(val, digits = 3, mantisa_digits = 2, simple = FALSE) { if(simple) { } # Manejar NA y NULL if(length(val) == 0) return(character(0)) result <- character(length(val)) # Valores NA na_idx <- is.na(val) result[na_idx] <- NA_character_ # Valores válidos valid_idx <- !na_idx valid_vals <- val[valid_idx] # Redondear valfor <- round(valid_vals, digits = digits) # Identificar cuáles necesitan notación científica needs_sci <- (valfor == 0 & valid_vals != 0) # Valores que se pueden representar normalmente result[valid_idx][!needs_sci] <- format(valfor[!needs_sci], nsmall = 0, scientific = FALSE) # Valores que necesitan notación científica if(any(needs_sci)) { sci_vals <- valid_vals[needs_sci] # Calcular exponente estándar exp_val <- floor(log10(abs(sci_vals))) # Ajustar exponente para mantener mantisa como 0.0X... exp_ajustado <- exp_val + mantisa_digits # Calcular mantisa ajustada mantisa <- sci_vals / (10^exp_ajustado) mantisa_redondeada <- round(mantisa, digits = digits) result[valid_idx][needs_sci] <- sprintf("%.*f×10^%d", digits, mantisa_redondeada, exp_ajustado) } return(result) }