Когда мне нужно фильтровать data.frame, то есть извлекать строки, которые удовлетворяют определенным условиям, я предпочитаю использовать subset
функцию:Почему `` `` лучше, чем `подмножество`?
subset(airquality, Month == 8 & Temp > 90)
, а не функцию [
:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Там являются двумя основными причинами для моих предпочтений:
Я нахожу, что код читается лучше, слева направо. Даже люди, которые ничего не знают о R, могут сказать, что делает вышеприведенное заявление
subset
.Поскольку столбцы можно назвать переменными в выражении
select
, я могу сэкономить несколько нажатий клавиш. В моем примере выше мне только приходилось вводитьairquality
один раз сsubset
, но три раза с[
.
Так я жил счастливым, используя subset
везде, потому что он короче и читает лучше, даже защищая свою красоту моих коллег кодеров R. Но вчера мой мир развалился. При чтении документации subset
, я заметил этот раздел:
Warning
This is a convenience function intended for use interactively. For programming it is better to use the standard subsetting functions like [, and in particular the non-standard evaluation of argument subset can have unanticipated consequences.
Может кто-нибудь помочь уточнить, что означают авторы?
Во-первых, что они означают по «для интерактивного использования»? Я знаю, что такое интерактивный сеанс, в отличие от сценария, запускаемого в режиме BATCH, но я не вижу, какую разницу он должен сделать.
Тогда, не могли бы вы объяснить «нестандартную оценку подмножества аргументов» и почему это опасно, может быть, привести пример?
Это немного меньше (но меньше, чем гайка подмножества) для использования с, 'с (Качество воздуха, Качество воздуха [Месяц == 8 & Temp> 90,])' –
В этом разделе обсуждается 'subset()' warning: http://r.789695.n4.nabble.com/Variable-passed-to-function-not-used-in-function-in-select-in-subset- tt872217.html – jthetzel
Вы также можете взглянуть на Cirlces 8.2.31 и 8.2.32 из «The R Inferno» http://www.burns-stat.com/pages/Tutor/R_inferno.pdf –