.Rmd 练习文件中的 round() 函数有问题
Problem with round() function in .Rmd exercise file
我在为练习创建 .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 在后台使用)试图很好地格式化这个科学记数法。因此,knit()
函数在 Markdown 文件中包含 1.200056 × 10<sup>4</sup>
而不是 12000.56
。当您 运行 xweave("example.Rmd")
然后检查生成的 example.md
文件时,您可以看到这一点。然后 exsolution
标签的后续处理因此在将其转换回数字时出现问题,因此出现警告。
为避免这种情况,您可以在练习的 R 代码中增加 scipen
限制,例如 options(scipen = 999)
。但这是非常技术性和乏味的。这是我们编写 fmt(...)
函数的原因之一,该函数执行各种与 R/exams 练习中的数字格式相关的便利任务。
我在为练习创建 .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 在后台使用)试图很好地格式化这个科学记数法。因此,knit()
函数在 Markdown 文件中包含 1.200056 × 10<sup>4</sup>
而不是 12000.56
。当您 运行 xweave("example.Rmd")
然后检查生成的 example.md
文件时,您可以看到这一点。然后 exsolution
标签的后续处理因此在将其转换回数字时出现问题,因此出现警告。
为避免这种情况,您可以在练习的 R 代码中增加 scipen
限制,例如 options(scipen = 999)
。但这是非常技术性和乏味的。这是我们编写 fmt(...)
函数的原因之一,该函数执行各种与 R/exams 练习中的数字格式相关的便利任务。