Я только что прочитал профиль @David Arenburg и нашел кучу полезных советов о том, как развить хорошие навыки/привычки R-программирования, и один из них особенно поразил меня. Я всегда думал, что функции применения в R были краеугольным камнем работы с фреймами данных, но он пишет:
Если вы работаете с data.frames, забудьте о функции apply — что бы вы ни делали — не используйте ее. Особенно с маржой 1 (единственный хороший вариант использования этой функции — работать со столбцами матрицы — маржа 2).
Несколько хороших альтернатив: ?do.call, ?pmax/pmin, ?max.col, ?rowSums/rowMeans/etc, замечательные пакеты matrixStats (для матриц), ?rowsum и многие другие.
Кто-нибудь может мне это объяснить? Почему функции применения не одобряются?
apply
-, а не обо всей*apply
семье. Основная проблема сapply
заключается в том, что он преобразует все данные в матрицу, которая искажает данные (посколькуmatrix
не может хранить разные классы, в отличие от фрейма данных), поэтому дает неожиданные результаты. Следовательно, при работе со столбцами лучше использовать остальную часть семейства*apply
, напримерlapply
илиsapply
. С другой стороны, поскольку R векторизован, языкapply
с запасом 1 будет очень медленным (независимо от проблемыmatrix
), поэтому я предлагаю вместо этого использовать векторизованные альтернативы. - person David Arenburg   schedule 06.06.2018*apply
. - person David Arenburg   schedule 06.06.2018