Проблема с функцией round () в файле упражнения .Rmd - PullRequest
1 голос
/ 16 апреля 2020

У меня проблема с созданием файла .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 / экзамены версии 2.3-6 и R версии 3.6.3.

1 Ответ

0 голосов
/ 16 апреля 2020

TL; DR: используйте fmt(Value, 2) вместо round(Value, 2). Это позволяет избежать проблем с научной нотацией c (и использовать округление от нуля). См. ?fmt для получения более подробной информации.

Причина ошибки на самом деле не в функции round() как таковой, а в том, что R по умолчанию использует scientifi c нотацию для чисел с определенным числом значащие цифры (фабрично-fre sh по умолчанию в R - scipen = 7). Кроме того, пакет knitr (используемый в фоновом режиме при проведении R / экзаменов) пытается красиво отформатировать эту научную нотацию c. Таким образом, вместо 12000.56 функция knit() включает 1.200056 &times; 10<sup>4</sup> в файле уценки. Это можно увидеть, когда вы запустите xweave("example.Rmd"), а затем просмотрите получившийся файл example.md. И затем при последующей обработке тега exsolution возникают проблемы с преобразованием этого значения обратно в число, а значит, и предупреждение.

Чтобы избежать этого, вы можете увеличить предел scipen в коде R упражнения Например, options(scipen = 999). Но это очень технично и утомительно. Это одна из причин, почему мы написали функцию fmt(...), которая выполняет различные вспомогательные задачи, связанные с форматированием чисел в упражнениях R / экзаменов.

...