Коли мені потрібно фільтрувати data.frame, тобто витягувати рядки, які відповідають певним умовам, я вважаю за краще використовувати subset
функцію:
subset(airquality, Month == 8 & Temp > 90)
Замість [
функції:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Є дві основні причини моїх переваг:
Я вважаю, що код читається краще зліва направо. Навіть люди, які нічого не знають про R, могли сказати, що робить
subset
твердження вище.Оскільки стовпці можна називати змінними у
select
виразі, я можу зберегти кілька натискань клавіш. У моєму прикладі вище я повинен був набрати лишеairquality
один разsubset
, але три рази[
.
Тож я жила щасливою, використовуючи subset
всюди, тому що вона коротша і краще читається, навіть відстоюючи її красу моїм колегам R-кодерам. Але вчора мій світ розпався. Читаючи subset
документацію, я помічаю цей розділ:
Увага
Це функція зручності, призначена для інтерактивного використання. Для програмування краще використовувати стандартні функції підмножини типу [, і, зокрема, нестандартна оцінка набору аргументів може мати непередбачувані наслідки.
Може хтось допоможе з’ясувати, що означають автори?
По-перше, що вони означають під " інтерактивним використанням "? Я знаю, що таке інтерактивна сесія, на відміну від сценарію, запущеного в режимі BATCH, але я не бачу, яку різницю він повинен мати.
Тоді, чи можете ви пояснити " нестандартну оцінку підмножини аргументів ", і чому це небезпечно, можливо, наведіть приклад?
dplyr::filter
є та ж проблема. Тобто, якщо в середовищі є змінна з цим ім'ям, вона використовуватиме її замість змінної у кадрі даних. Робить заплутану налагодження!
with(airquality, airquality[Month == 8 & Temp > 90, ])