r-exams - .Rmd 练习文件中的 round() 函数存在问题
问题描述
我有一个问题,我为练习创建了一个 .Rmd 文件,并且我在函数中包含了大量的数字round()
。这是一个最小的例子:
```{r data generation, echo = FALSE, results = "hide"}
Value = 12000.555
```
Question
========
temp
Meta-information
================
exname: temp
extype: num
exsolution: `r round(Value, 2)`
extol: 0.01
我尝试使用exams2pdf()
产生以下错误将此练习编译为考试:
exams2pdf("example.Rmd")
## Warning message: In read_metainfo(file) : NAs introduced by coercion
这是为什么?我正在使用 R/exams 版本 2.3-6 和 R 版本 3.6.3。
解决方案
TL;DR:使用fmt(Value, 2)
而不是round(Value, 2)
. 这避免了科学记数法的问题(并使用从零四舍五入)。有关?fmt
更多详细信息,请参阅。
错误的原因实际上不是round()
函数本身,而是 R 默认情况下对具有一定数量有效数字的数字使用科学记数法(R 中的出厂默认值为scipen = 7
)。此外,knitr
包(由 R/exams 在后台使用)试图很好地格式化这个科学记数法。因此,12000.56
该knit()
函数不包含1.200056 × 10<sup>4</sup>
在 Markdown 文件中。您可以在运行时看到这一点xweave("example.Rmd")
,然后检查生成的example.md
文件。然后标签的后续处理exsolution
因此无法将其转换回数字,因此会发出警告。
为避免这种情况,您可以增加scipen
练习的 R 代码中的限制,例如options(scipen = 999)
. 但这是非常技术性和乏味的。这就是为什么我们编写fmt(...)
函数来执行与 R/exams 练习中的数字格式有关的各种便利任务的原因之一。
推荐阅读
- linux - 读取视频设备的问题
- android - SharedPreferences String + Int(保存和检索)
- c - 尽管套接字已准备好读取,但读取系统调用返回零字节
- angular - 添加代理配置后,Angular 外部 API 调用继续在poort 4200 上提供服务
- mysql - MySQL获取另一个属性的所有可能值都不存在的属性
- unity3d - 使用 iText7 构建 UWP Unity 时出现 NotSupportedException
- amazon-web-services - AWS API Gateway 错误 - [429] 已达到此 API 的最大请求验证器数量
- latex - 使用 fancyhdr 设计的页脚中的 minipage 中的 Raggedleft
- sql - 查找给定月份的最后一个星期六
- reactjs - 使用相同的依赖值调用 useEffect 两次 - 依赖是可观察的 mobx 属性