考虑以下代码:
sample(1:20, 1)
Run Code Online (Sandbox Code Playgroud)
如果结果恰好小于或等于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代码转换为乳胶.我的规则是任何小于或等于10的数字都应该打印成单词.
Sve*_*ein 13
您可以使用该english包将数字转换为英语单词:
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"
Run Code Online (Sandbox Code Playgroud)
这与Mark的答案基本相同,但更简洁:
numbers = c('zero', 'one', 'two', 'three', 'four', 'five',
'six', 'seven', 'eight', 'nine', 'ten')
readable = function (x) ifelse(x < 11, numbers[x + 1], x)
Run Code Online (Sandbox Code Playgroud)
> readable(sample(1:20, 10))
[1] "20" "12" "13" "seven" "ten" "11" "17" "eight" "16" "18"
Run Code Online (Sandbox Code Playgroud)
虽然如果你使用Kniter与LaTeX,这可以说是LaTeX的任务,而不是R:R提供原始数据,LaTeX负责格式化.我可能只是告诉knitr发出一个包裹在宏内的数字 \readable{42}- 然后用这个宏进行转换(未经测试,需要包siunitx):
\newcommand*\readable[1]{%
\ifcase#1 zero\or one\or two\or three\or four\or five\or
six\or seven\or eight\or nine\or ten\else\num{#1}}
Run Code Online (Sandbox Code Playgroud)