Quando preciso filtrar um data.frame, ou seja, extrair linhas que atendam a determinadas condições, prefiro usar a subsetfunção:
subset(airquality, Month == 8 & Temp > 90)
Em vez da [função:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Há duas razões principais para minha preferência:
Acho que o código lê melhor, da esquerda para a direita. Mesmo as pessoas que não sabem nada sobre R podem dizer o que a
subsetafirmação acima está fazendo.Como as colunas podem ser referidas como variáveis na
selectexpressão, posso salvar algumas pressionamentos de tecla. No meu exemplo acima, eu só precisei digitarairqualityuma vez comsubset, mas três vezes com[.
Então, eu estava vivendo feliz, usando em subsettodos os lugares porque é mais curto e lê melhor, até mesmo defendendo sua beleza aos meus colegas programadores R. Mas ontem meu mundo se desfez. Ao ler a subsetdocumentação, observe esta seção:
Atenção
Esta é uma função de conveniência destinada ao uso interativamente. Para a programação, é melhor usar as funções de subconjunto padrão como [e, em particular, a avaliação não padrão do subconjunto de argumentos pode ter consequências imprevistas.
Alguém poderia ajudar a esclarecer o que os autores querem dizer?
Primeiro, o que eles querem dizer com " para uso interativo "? Eu sei o que é uma sessão interativa, em oposição a um script executado no modo BATCH, mas não vejo a diferença que deve fazer.
Então, você poderia explicar " a avaliação não padrão do subconjunto de argumentos " e por que é perigosa, talvez fornecer um exemplo?
dplyr::filtertem o mesmo problema. Ou seja, se o ambiente tiver uma variável com esse nome, ele será usado em vez da variável no quadro de dados. Torna a depuração confusa!
with(airquality, airquality[Month == 8 & Temp > 90, ])