Когда мне нужно отфильтровать data.frame, т.е. извлечь строки, которые удовлетворяют определенным условиям, я предпочитаю использовать функцию subset
:
subset(airquality, Month == 8 & Temp > 90)
Вместо функции [
:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Есть две основные причины моего предпочтения:
Я считаю, что код читается лучше слева направо. Даже люди, которые ничего не знают о R, могут сказать, что делает вышеприведенное утверждение subset
.
Поскольку столбцы могут называться переменными в выражении select
, я могу сохранить несколько нажатий клавиш. В моем примере выше мне нужно было набрать airquality
только один раз с subset
, но три раза с [
.
Так что я жил счастливо, везде использовал subset
, потому что он короче и лучше читается, даже отстаивая его красоту среди моих коллег-программистов. Но вчера мой мир распался. Читая документацию subset
, я замечаю этот раздел:
Внимание
Это удобная функция, предназначенная для интерактивного использования. Для программирования лучше использовать стандартные функции подмножеств, такие как [, и, в частности, нестандартная оценка подмножества аргументов может иметь непредвиденные последствия.
Может ли кто-нибудь помочь прояснить, что имеют в виду авторы?
Во-первых, что они подразумевают под " для интерактивного использования "? Я знаю, что такое интерактивный сеанс, в отличие от сценария, запускаемого в режиме BATCH, но я не понимаю, какое это должно иметь значение.
Тогда, не могли бы вы объяснить " нестандартная оценка подмножества аргументов " и почему это опасно, может быть, привести пример?