You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Quarto/R Markdown中将数字和百分比格式化为文本的方法求助

解决方案:将百分比转换为英文文本的R方法

方法1:使用english包实现通用转换

english包可直接将数字转为英文表述,搭配简单逻辑即可处理百分比场景,还能覆盖常见的简化表述(如50%→Half):

# 安装并加载包
install.packages("english")
library(english)
library(stringr)

# 定义转换函数
percent_to_text <- function(x, capitalize = FALSE) {
  # 预设常见特殊百分比的简化表述
  special_cases <- c(
    0.5 = "half",
    0.25 = "a quarter",
    0.75 = "three quarters",
    0.1 = "one tenth",
    0.2 = "one fifth"
  )
  
  # 优先匹配特殊情况
  if (as.character(x) %in% names(special_cases)) {
    result <- special_cases[as.character(x)]
  } else {
    # 普通百分比:转成整数后转英文,再拼接"percent"
    num_text <- as.character(english(x * 100))
    result <- paste(num_text, "percent")
  }
  
  # 处理首字母大写需求
  if (capitalize) {
    result <- str_to_sentence(result)
  }
  result
}

# 测试示例
percent_to_text(0.5, capitalize = TRUE)
#> [1] "Half"
percent_to_text(0.25)
#> [1] "a quarter"
percent_to_text(0.42, capitalize = TRUE)
#> [1] "Forty-two percent"
percent_to_text(25/50, capitalize = TRUE)
#> [1] "Half"

方法2:结合papaja实现兼容转换

如果想继续使用papaja的数字转文本能力,可自定义函数兼容百分比场景:

library(papaja)
library(stringr)

percent_to_text_papaja <- function(x, capitalize = FALSE) {
  special_cases <- c(
    0.5 = "half",
    0.25 = "a quarter",
    0.75 = "three quarters"
  )
  
  if (as.character(x) %in% names(special_cases)) {
    result <- special_cases[as.character(x)]
  } else {
    # 用papaja处理整数部分,再拼接百分比后缀
    num_text <- printnum(x * 100, numerals = FALSE, capitalize = FALSE)
    result <- paste(num_text, "percent")
  }
  
  if (capitalize) {
    result <- str_to_sentence(result)
  }
  result
}

# 测试示例
percent_to_text_papaja(0.42, capitalize = TRUE)
#> [1] "Forty-two percent"
percent_to_text_papaja(0.5, capitalize = TRUE)
#> [1] "Half"

关于报错原因说明

你使用papaja::printnum或printp处理小数时触发报错,是因为numerals = FALSE参数仅对整数有效:当输入为小数时,printnum会调用formatC函数,而formatC并不支持numerals和capitalize参数,因此出现"unused arguments"错误。

内容的提问来源于stack exchange,提问作者maia-sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:01:00