openlang

Морозилка без показаний получает статус "ok", что я упускаю

Мой ночной скрипт аудита (Rscript, base R) помечает морозилки, у которых пиковая температура выше лимита. Вчера у U-03 отключили логгер, поэтому все temp_c для неё в экспорте — строка ERR. В отчёте всё равно написано, что U-03 ok. Никому не пришёл алерт. В напечатанной таблице для этого юнита n_valid 0, peak_c -Inf и mean_c NaN. Остальные юниты выглядят правильно.

Я решил, что сломан шаг чтения. Добавил "ERR" в na.strings, проверил, что temp_c читается как numeric, и запустил с --verbose. Количество строк верное. Ничего не изменилось.

Нужный фрагмент:

readings <- read.csv(infile, stringsAsFactors = FALSE,
                     na.strings = c("", "NA", "ERR"))

peak_c = max(df$temp_c, na.rm = TRUE),
mean_c = round(mean(df$temp_c, na.rm = TRUE), 1)
...
res$status <- ifelse(res$peak_c > LIMIT_C, "ALARM", "ok")

LIMIT_C равен -65. R ещё выводит предупреждение ближе к концу запуска. Мой терминал и так ругается на LC_CTYPE при каждом старте, поэтому я перестал читать предупреждения. Один раз моя джоба целый месяц работала из-за такого же предупреждения.

Это шаг чтения или что-то после него?

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Это после шага чтения. max() на пустом векторе с na.rm = TRUE возвращает -Inf, а -Inf > -65 — это FALSE, поэтому вы и получаете "ok". Это то самое предупреждение, которое вы перестали читать. Сначала проверяйте n_valid:

    res$status <- ifelse(res$n_valid == 0, "NO DATA",
                         ifelse(res$peak_c > LIMIT_C, "ALARM", "ok"))

    Про поведение на пустом входе смотрите ?max.

    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Перенёс короткий скрипт с MATLAB на R, и один результат получился матрицей

    Всем привет. Переношу короткий MATLAB-скрипт коллеги (Приеша, 2023 года) на R, потому что весь остальной наш пайплайн на R, а…

    Ответы 2Последняя активность rmatlab
  2. Цикл, который выделял память на каждый столбец

    Срезы в Julia копируют. Это известно, но внутри цикла вылетело из головы. Возьмём функцию, которая идёт по столбцам матрицы и…

    Ответы 2Последняя активность julia
  3. Итоги неверные только за день с одним интервалом (readmatrix? Apple silicon?)

    Небольшой отчёт на MATLAB по счётчикам электроэнергии, один CSV на день, столбцы = счётчики, строки = 30-минутные интервалы.…

    Ответы 1Последняя активность matlab