Size: a a a

R (язык программирования)

2020 October 27

a

aGricolaMZ in R (язык программирования)
Philipp Upravitelev
да так и преодолевали, со страданием
обновляли пакет и смотрели, где что ломается
и то это был простенький requests, что будет, когда панды надо будет обновлять все же - я не знаю
будем как-то в локальных докерах/венвах тестировать, видимо
а всякие тесты помогли не делать это таким мучительным?

а то я, грешно признаться, тесты использовал в пакетах, скорее, чтобы поднять coverage потсфактум, проверяя работает ли функция, а не перед тем как начать разрабатывать, написав осмысленные тесты...
источник

PU

Philipp Upravitelev in R (язык программирования)
aGricolaMZ
а всякие тесты помогли не делать это таким мучительным?

а то я, грешно признаться, тесты использовал в пакетах, скорее, чтобы поднять coverage потсфактум, проверяя работает ли функция, а не перед тем как начать разрабатывать, написав осмысленные тесты...
скажем, мы пошли брутальным путем

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

плюс есть другие проблемы - иногда нарушается совместимость пакетов. типа, ты обновил пакет, в коде сейчас ничего не сломалось.
но какой-нибудь другой древний пакет, который использовал одну функцию из этого, взял и сломался. и увидишь ты это только в результате
так как кодовая база всяких отчетов и прочего уже очень большая, всюду проверки не воткнешь
источник

a

aGricolaMZ in R (язык программирования)
Philipp Upravitelev
скажем, мы пошли брутальным путем

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

плюс есть другие проблемы - иногда нарушается совместимость пакетов. типа, ты обновил пакет, в коде сейчас ничего не сломалось.
но какой-нибудь другой древний пакет, который использовал одну функцию из этого, взял и сломался. и увидишь ты это только в результате
так как кодовая база всяких отчетов и прочего уже очень большая, всюду проверки не воткнешь
наверное, можно тестировать простым каким-то примером. Вот первые сто строк, на таком-то этапе должен появится такой-то объект, на следующем шаге другой... Занудно, но в результате сразу будет видно, на каком шаге все ломается.

Но да, надо смолоду. Постфактум уже вставлять проверки всюду без особой надобности не будешь...
источник

PU

Philipp Upravitelev in R (язык программирования)
aGricolaMZ
наверное, можно тестировать простым каким-то примером. Вот первые сто строк, на таком-то этапе должен появится такой-то объект, на следующем шаге другой... Занудно, но в результате сразу будет видно, на каком шаге все ломается.

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

PU

Philipp Upravitelev in R (язык программирования)
одна из самых неочевидных штук, кстати, которая мне попадалась - если читать и обрабатывать файлы в lapply-цикле, а потом их склеивать через rbindlist, то можно потерять что-нибудь.
например, у меня в результате обработки так получилось, что таблица оказалась пустой, неправильно пофильтровался. rbindlist сожрал без особых проблем, просто пропустил пустую таблицу и все. в результате пришлось делать проверку, что количество элементов в списке, подаваемом в rbindlist равно количеству элементов, по которым итерировались (в моем случае вектор названий файлов)

@artemklevtsov имхо, кандидат на pr в репу. не хотишь? :)))
источник

АК

Артём Клевцов... in R (язык программирования)
Philipp Upravitelev
одна из самых неочевидных штук, кстати, которая мне попадалась - если читать и обрабатывать файлы в lapply-цикле, а потом их склеивать через rbindlist, то можно потерять что-нибудь.
например, у меня в результате обработки так получилось, что таблица оказалась пустой, неправильно пофильтровался. rbindlist сожрал без особых проблем, просто пропустил пустую таблицу и все. в результате пришлось делать проверку, что количество элементов в списке, подаваемом в rbindlist равно количеству элементов, по которым итерировались (в моем случае вектор названий файлов)

@artemklevtsov имхо, кандидат на pr в репу. не хотишь? :)))
Какую репу?
источник

PU

Philipp Upravitelev in R (язык программирования)
data.table
источник

АК

Артём Клевцов... in R (язык программирования)
Если ты про перевод, то скоро будет, правда нам ещё вычитать всё надо.
источник

PU

Philipp Upravitelev in R (язык программирования)
я про проверку rbindlist
источник

АК

Артём Клевцов... in R (язык программирования)
Philipp Upravitelev
скажем, мы пошли брутальным путем

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

плюс есть другие проблемы - иногда нарушается совместимость пакетов. типа, ты обновил пакет, в коде сейчас ничего не сломалось.
но какой-нибудь другой древний пакет, который использовал одну функцию из этого, взял и сломался. и увидишь ты это только в результате
так как кодовая база всяких отчетов и прочего уже очень большая, всюду проверки не воткнешь
В идеале код надо паковать в пакеты и тестировать нормальными юнит-тестами на сэмплах данных со всеми аномалиями.
источник

АК

Артём Клевцов... in R (язык программирования)
Philipp Upravitelev
я про проверку rbindlist
Его там часто фиксят и без нас, но если воспроизводимый кейс кинешь, то можно подумать.
источник

PU

Philipp Upravitelev in R (язык программирования)
Артём Клевцов
В идеале код надо паковать в пакеты и тестировать нормальными юнит-тестами на сэмплах данных со всеми аномалиями.
так то в идеале
у нас десятка три разных борды минимум
источник

PU

Philipp Upravitelev in R (язык программирования)
Артём Клевцов
Его там часто фиксят и без нас, но если воспроизводимый кейс кинешь, то можно подумать.
нарисую минут через 20 наверн
источник

АК

Артём Клевцов... in R (язык программирования)
Philipp Upravitelev
это ваше защитное программирование... везде натыкать проверок и логов можно, я даже как-то пробовал писать такой код, когда работал с грязными данными
но времени уходит уйма, имхо, проще идти проактивно, "упало - поднял". а для этого дешевле обновляться регулярно.
Написание тестов - это априори трудоёмкий и неблагодарный труд, который в перспективе должен окупиться пойманными ошибками.
источник

PU

Philipp Upravitelev in R (язык программирования)
ну вот нам дешевле поднимать упавшее, кажется
источник

АК

Артём Клевцов... in R (язык программирования)
Тесты позволяют сразу понимать где и почему падает, а в реальности иногда надо целые расследования проводить, чтобы выяснить причину.
источник

АК

Артём Клевцов... in R (язык программирования)
Опять всё сводится к дилемме сделать хорошо/правильно или быстро/в срок.
источник

IS

Ivan Struzhkov in R (язык программирования)
Philipp Upravitelev
насколько я помню, в нормальных пакетах для варнингов есть проверка на то, интерактивно запущено или нет
плюс в плотли я видел, что там какой-то варнинг об устаревшей функции показывается единожды в 8 часов
ну вот да было бы хорошо проверку делать
источник

АК

Артём Клевцов... in R (язык программирования)
Не все знают как писать тесты, что тестировать и как это внедрять в проекты. И вариантов это сделать множество, как в R, так и в Python.
источник

PU

Philipp Upravitelev in R (язык программирования)
Артём Клевцов
Его там часто фиксят и без нас, но если воспроизводимый кейс кинешь, то можно подумать.
вот, смотри
> tmp <- list(
+   data.table(v1 = 1, v2 = 'a'),
+   data.table(),
+   data.table(v1 = 3, v2 = 'c')
+ )
> rbindlist(tmp)
  v1 v2
1:  1  a
2:  3  c
источник