Предупреждающие сообщения продолжают появляться в блокнотах RStudio фрагментами, не связанными с предупреждениями.

Я начинаю использовать блокноты RStudio и все еще пытаюсь понять, как работают некоторые вещи. Я не понимаю, почему некоторые созданные предупреждающие сообщения сохраняются и появляются при выполнении кода, совершенно не связанного с сообщением. Например, у меня есть документ с несколькими кусками, где последний из них выдает предупреждение

> warnings()
Warning messages:
1: Unknown or uninitialised column: 'perc.goal.met.period'.
2: Unknown or uninitialised column: 'perc.goal.met.period'.
3: Unknown or uninitialised column: 'perc.goal.met.period'.
4: Unknown or uninitialised column: 'perc.goal.met.period'.
5: Unknown or uninitialised column: 'perc.goal.met.period'.
6: Unknown or uninitialised column: 'perc.goal.met.period'.
7: Unknown or uninitialised column: 'perc.goal.met.period'.
8: Unknown or uninitialised column: 'perc.goal.met.period'.
9: Unknown or uninitialised column: 'perc.goal.met.period'.
10: Unknown or uninitialised column: 'perc.goal.met.period'.
11: Unknown or uninitialised column: 'perc.goal.met.period'.
12: Unknown or uninitialised column: 'perc.goal.met.period'.
13: Unknown or uninitialised column: 'perc.goal.met.period'.
14: Unknown or uninitialised column: 'perc.goal.met.period'.
15: Unknown or uninitialised column: 'perc.goal.met.period'.
16: Unknown or uninitialised column: 'perc.goal.met.period'.
17: Unknown or uninitialised column: 'perc.goal.met.period'.
18: Unknown or uninitialised column: 'perc.goal.met.period'.
19: Unknown or uninitialised column: 'perc.goal.met.period'.
20: Unknown or uninitialised column: 'perc.goal.met.period'.
21: Unknown or uninitialised column: 'perc.goal.met.period'.
22: Unknown or uninitialised column: 'perc.goal.met.period'.
23: Unknown or uninitialised column: 'perc.goal.met.period'.
24: Unknown or uninitialised column: 'perc.goal.met.period'.
25: Unknown or uninitialised column: 'perc.goal.met.period'.
26: Unknown or uninitialised column: 'perc.goal.met.period'.
27: Unknown or uninitialised column: 'perc.goal.met.period'.
28: Unknown or uninitialised column: 'perc.goal.met.period'.
29: Unknown or uninitialised column: 'perc.goal.met.period'.
30: Unknown or uninitialised column: 'perc.goal.met.period'.
There were 30 warnings (use warnings() to see them)

Я в порядке с этим предупреждением. Но позже я подумал, что загружу одну дополнительную библиотеку к первому из чанков (где я их загружаю). После запуска этого куска я получаю:

```{r echo=F, message=F, warnings=F, include=F}
# Load libraries
library(rgdal)
library(raster)
library(openxlsx)
library(tidyverse)
library(dplyr)
library(magrittr)
library(ggplot2)
library(rasterVis)
```
There were 30 warnings (use warnings() to see them)

Если я вижу предупреждения, это те, которые я напечатал раньше. Почему я вижу их здесь? Я вижу это и в других фрагментах, также не связанных с переменной perc.goal.met.period. Если я увижу предупреждения, они перестанут появляться на какое-то время, но в момент, который я все еще не могу предвидеть, в какой-то момент они снова появятся.

Есть ли логическое объяснение такому поведению? Большое спасибо за твою помощь!


person Javier Fajardo    schedule 25.04.2017    source источник
comment
Это происходит со мной все время. Если я редактирую и сохраняю rmd (я думаю, это ключ), то следующая команда, которую я ввожу в консоли, возвращает каждое предупреждение в сеансе в 50 раз больше.   -  person Frank    schedule 25.04.2017
comment
Ой! Так бывает не только у меня. Может быть, это просто функция, напоминающая вам, что где-то в вашем коде есть предупреждение. Спасибо за ваш комментарий Фрэнк!   -  person Javier Fajardo    schedule 25.04.2017
comment
Я думаю, что это происходит, когда вы кэшируете фрагмент, предупреждения возвращаются позже. У меня такое случилось.   -  person sconfluentus    schedule 25.04.2017
comment
Это может быть правильно, это был мой случай   -  person Javier Fajardo    schedule 25.04.2017
comment
Я думаю, связанный с этим: stackoverflow.com/questions/42864262/ (нет реального решения, хотя есть еще предположения)   -  person geotheory    schedule 07.06.2017
comment
Полезно: assign("last.warning", NULL, envir = baseenv())   -  person geotheory    schedule 07.06.2017
comment
Можете ли вы уточнить, запускаете ли вы фрагменты в интерактивном режиме или компилируете документ сразу?   -  person IBrum    schedule 23.02.2018


Ответы (2)


Вы будете видеть предупреждающие сообщения, пока не удалите их. Запуск функции warnings() этого не делает. Чтобы очистить предупреждения, вы можете выполнить следующую команду:

assign("last.warning", NULL, envir = baseenv())

Однако лучший подход — исправить код, чтобы предупреждения не выводились. Один из способов справиться с этим — использовать tryCatch() в R.

Вы также можете отключить все предупреждения с помощью функции supressWarnings(), но это не рекомендуется, так как это не позволит вам увидеть ни одно из них.

person Katia    schedule 27.04.2018

По моему опыту, это происходит в RStudio, в то время как мой код все еще имеет ошибку, даже если он не запущен (например, когда я оставляю какой-то неправильный код для последующей проверки). Когда я удаляю, изменяю или конвертирую в комментарии соответствующие строки, это поведение заканчивается. Я предполагаю, что это вызвано интерпретатором RStudio. Было бы интересно узнать, есть ли у людей, использующих базу R, такая же проблема.

person JASC    schedule 26.05.2019