我正在使用library(english)来使我的rmarkdown文档符合APA关于何时将数字写成单词的指导方针.非常方便,我只需将我的值包装在english()中,它们就会正确地出来.

显然,当以数字开始一个句子时,它需要将第一个字母大写,所以我想我可以将english(1)包装在tools::toTitleCase()中,但它不喜欢这样:

Error in toTitleCase(english(1)) : 'text' must be a character vector

toupper(english(1))的工作正如人们可能预期的那样:

> toupper(english(1))
[1] "ONE"`

我有一个可行的解决方案:

toTitleCase(as.character(english(1)))

我没意见但是...

...这是怎么回事?为什么toupper()能够像您预期的那样处理english(1)的输出,而toTitleCase()却抛出错误?

Reprex:

install.packages("english")
library(engilsh)
library(tools)

toTitleCase(english(1))

toupper(english(1))

编辑:

我是个白痴:有个函数english::Words(1),它的功能完全是我想要的.

推荐答案

如果你玩弄english(1)的输出,你会发现它有一个班级的"英语",有一个类型的"双",这显然不是"字符".

library(english)

class(english(1))
[1] "english"

typeof(english(1))
[1] "double"

而在toupper()的源代码中,你可以发现有一个语句可以测试你的输入是否是"字符"类型,如果不是,它会为你强制执行:

toupper
function (x) 
{
    if (!is.character(x)) 
        x <- as.character(x)
    .Internal(toupper(x))
}

另一方面,如果输入的不是"Character",则toTitleCase()将抛出错误:

toTitleCase ### only the relevant part is extracted below
function (text) 
{
  ###
  if (typeof(text) != "character") 
    stop("'text' must be a character vector")
}

因此,toupper可以天生处理非字符输入,而toTitleCase不能.

R相关问答推荐

寻找图片边缘

从有序数据中随机抽样

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

抖动点与嵌套类别变量箱形图的位置不对齐

获取一个数据库框架的摘要,该数据库框架将包含一列数据库框架,

修改用R编写的用户定义函数

如何根据嵌套元素的名称高效而优雅地确定它属于哪个列表?

在R中按行按列范围查找最大值的名称

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

如何将R中数据帧中的任何Nas替换为最后4个值

过滤名称以特定字符串开头的文件

KM估计的差异:SvyKm与带权重的调查

自动STAT_SUMMARY统计与手动标准误差之间的差异

有没有办法定制Plot(allEffects())面板标题?

构建一个6/49彩票模拟系统

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

是否从列中删除★符号?

将数据从一列转换为按组累计计数的单个虚拟变量

conditionPanel不考虑以下条件

如何在不使用SHINY的情况下将下拉滤镜列表添加到ggploy?