Kiedy trzeba filtrować data.frame, czyli wyciąg wiersze, które spełniają określone warunki, wolę używać subset
funkcję:Dlaczego jest `[` lepiej niż `podzbiór`?
subset(airquality, Month == 8 & Temp > 90)
zamiast funkcji [
:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Nie są dwa główne powody moich preferencji:
Uważam, że kod brzmi lepiej, od lewej do prawej. Nawet ludzie, którzy nic nie wiedzą o R, mogą powiedzieć, co robi powyższe oświadczenie
subset
.Ponieważ kolumny można nazywać zmiennymi w wyrażeniu
select
, mogę zapisać kilka naciśnięć klawiszy. W powyższym przykładzie musiałem tylko raz wpisaćairquality
zsubset
, ale trzy razy z[
.
Tak żyłem zadowolony, używając subset
wszędzie, ponieważ jest krótsza i brzmi lepiej, nawet promując swoje piękno do moich kolegów programistów R. Ale wczoraj mój świat się rozpadł. Podczas czytania dokumentacji subset
, zauważam ten rozdział:
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.
Może ktoś pomóc wyjaśnić, co autorzy na myśli?
Po pierwsze, co oznaczają "do użytku interaktywnego"? Wiem, czym jest sesja interaktywna, w przeciwieństwie do skryptu uruchamianego w trybie BATCH, ale nie widzę różnicy, jaką powinna ona mieć.
Następnie, proszę wyjaśnić "niestandardową ocenę podzbioru argumentów" i dlaczego jest niebezpieczny, może podać przykład?
Jest to nieco mniej (a nakrętka poniżej części) w użyciu, 'z (czystości powietrza, czystości powietrza [miesiąc == 8 i Temp> 90]) ' –
Ten wątek omawia ostrzeżenie 'subset()': http://r.789695.n4.nabble.com/Variable-passed-to-function-not-used-in-function-in-select-in-subset- tt872217.html – jthetzel
Możesz również rzucić okiem na Cirlces 8.2.31 i 8.2.32 z "The R Inferno" http://www.burns-stat.com/pages/Tutor/R_inferno.pdf –