如果小于10,则将数字打印为word

如果小于10,则将数字打印为word,r,latex,knitr,R,Latex,Knitr,考虑以下代码: sample(1:20, 1) 如果结果正好小于或等于10,我可以让R把数字打印成一个字吗。例如,如果sample(1:20,1)的结果是2,我可以编程R将结果打印为2,如果sample(1:20,1)的结果是10,我可以编程R将结果打印为10,如果sample(1:20,1)的结果是13,我可以编程R将结果打印为13,依此类推 我正在使用knitr将R代码转换为latex,用于我的论文。我的规则是任何小于或等于10的数字都应该打印为word。这并不优雅,但我认为它可以满足您的

考虑以下代码:

sample(1:20, 1)
如果结果正好小于或等于10,我可以让R把数字打印成一个字吗。例如,如果
sample(1:20,1)
的结果是2,我可以编程R将结果打印为2,如果
sample(1:20,1)
的结果是10,我可以编程R将结果打印为10,如果
sample(1:20,1)
的结果是13,我可以编程R将结果打印为13,依此类推


我正在使用knitr将R代码转换为latex,用于我的论文。我的规则是任何小于或等于10的数字都应该打印为word。

这并不优雅,但我认为它可以满足您的要求

set.seed(1234)

x <- sample(1:20, 1)

my.data <- read.table(text='
  x    y
  0    zero
  1    one
  2    two
  3    three
  4    four
  5    five
  6    six
  7    seven
  8    eight
  9    nine
  10   ten
', header = TRUE)

if(x > 10) {y = x} else {y = my.data$y[x == my.data$x]}

data.frame(x, y)

  x     y
1 3 three
set.seed(1234)

x这里的答案基本上与马克的答案相同,但更加简洁:

numbers = c('zero', 'one', 'two', 'three', 'four', 'five',
            'six', 'seven', 'eight', 'nine', 'ten')
readable = function (x) ifelse(x < 11, numbers[x + 1], x)
虽然如果将knitr与LaTeX一起使用,这可以说是LaTeX的任务,而不是R的任务:R提供原始数据,LaTeX负责格式化。我可能会告诉knitr发出包装在宏中的数字–
\readable{42}–然后用这个宏进行转换(未测试,需要包
siunitx
):

\newcommand*\readable[1]{%
\如果案例#1零\或一\或二\或三\或四\或五\或
六\或七\或八\或九\或十\否则\num{1}

您可以使用
英语
软件包将数字转换为英语单词:

set.seed(1)
s <- sample(1:20, 10)
# [1]  6  8 11 16  4 14 15  9 19  1

library(english)
ifelse(s > 10, s, as.character(english(s)))
# [1] "six"   "eight" "11"    "16"    "four"  "14"    "15"    "nine"  "19"    "one"
set.seed(1)
s10,s,as.字符(英语)
#[1]“六”“八”“11”“16”“四”“14”“15”“九”“19”“一”

你的论文是否只包含整数,即你想为
9.34
打印什么?这种通用方法非常完美。除了
english
软件包之外,还有一些可选软件包(
qdap
xfun
是两种)。下面是两个类似于
english()
的函数示例:
> readable(sample(1:20, 10))
 [1] "20"    "12"    "13"    "seven" "ten"   "11"    "17"    "eight" "16"    "18"
set.seed(1)
s <- sample(1:20, 10)
# [1]  6  8 11 16  4 14 15  9 19  1

library(english)
ifelse(s > 10, s, as.character(english(s)))
# [1] "six"   "eight" "11"    "16"    "four"  "14"    "15"    "nine"  "19"    "one"