Quando preciso filtrar um data.frame, ou seja, extrair linhas que atendam a determinadas condições, prefiro usar a subset
funçã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
subset
afirmação acima está fazendo.Como as colunas podem ser referidas como variáveis na
select
expressão, posso salvar algumas pressionamentos de tecla. No meu exemplo acima, eu só precisei digitarairquality
uma vez comsubset
, mas três vezes com[
.
Então, eu estava vivendo feliz, usando em subset
todos 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 subset
documentaçã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::filter
tem 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, ])