Funcao attach ou $?

Ir em baixo

Funcao attach ou $?

Mensagem por Valeria Andrade em Sex Mar 30, 2018 3:34 pm

Prof Vidal durante o workshop em 2018 mencionou que prefere usar o $ invez da funcao attach.
Mas no video # 1.7 feito em 2015, ele ensina o uso do attach.
minha duvida e sobre nesse momento do aprendizagem ..qual e o melhor attach(dados) ou dados($nome_da_coluna)
Entao, devo aprender o uso do attach como foi ensinado em 2015 ou o Prof Vidal vai atualizar o ensino dessa funcao attach?
Obrigada,
Valeria

Valeria Andrade

Mensagens : 57
Data de inscrição : 12/03/2018

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Funcao attach ou $?

Mensagem por Prof. Marcos em Sex Mar 30, 2018 5:57 pm

Olá, Valeria!

Então, eu diria que a resposta depende bastante de como você normalmente usa o R, e como você deve continuar a explorá-lo.

O attach() é uma função extremamente prática e útil, e usá-la em análises simples pode ser feito sem problemas - e por isso eu sempre ensino quando estamos dando os nossos primeiros passos. Por "análise simples" eu poderia dizer algo como: qualquer análise na qual você carrega um único conjunto de dados ao longo do script, e não faz alterações nestes dados dentro do próprio R.

Por outro lado, em scripts mais longos, onde mais de um conjunto de dados é carregado ou ainda onde o conjunto de dados carregado originalmente passa por várias modificações dentro do R (como correções ou alterações nos valores originais da planilha), eu diria que o attach() começa a gerar alguns riscos. Não é que você necessariamente teria problemas, mas uma distração pode gerar um "erro silencioso" - algo que sai errado na análise, mas você não recebe um mensagem de erro.

Então, na prática, o que temos é uma função bem útil e prática, e que é ótima para o aprendizado. Ela é confiável nas situações mais simples de análises, mas pode ser arriscada em situações mais complexas - mas ainda é segura se você tiver bastante atenção na montagem do script.

Acho que é isso. Qualquer coisa continuamos o assunto por aqui, ok?
avatar
Prof. Marcos

Mensagens : 346
Data de inscrição : 23/12/2015
Idade : 37
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Funcao attach ou $?

Mensagem por Vanessa Escolano Maso em Sab Mar 31, 2018 12:47 am

Olá, tudo bem?
Aproveitando o gancho sobre o attach...

Estou trabalhando com meus dados e notei uma coisa... Eu dou os comandos à seguir (1° código) e ele não altera essas variáveis para variável qualitativa, permanecendo o mesmo tipo de variável do meu input original. O que pode estar acontecendo? Obs: Pela imagem pode-se ver que ele reconhece as variáveis, entretanto, não as transforma (imagem 1). Ele só está transformando quando uso o segundo código (imagem 2)...

Código:
genotipo<-read.table("C:/Users/Vanessa/Google Drive/Vanessa Escolano/Artigo LES/Regressao/SNPs_genotipos2.txt", h=T)
attach(genotipo)
Grupo <- as.factor(Grupo)
Sexo <- as.factor(Sexo)
SNP1_G <- as.factor(SNP1_G)
SNP1_A <- as.factor(SNP1_A)
SNP1_AA <- as.factor(SNP1_AA)
SNP1_AG <- as.factor(SNP1_AG)
SNP1_GG <- as.factor(SNP1_GG)

Código:
genotipo<-read.table("C:/Users/Vanessa/Google Drive/Vanessa Escolano/Artigo LES/Regressao/SNPs_genotipos2.txt", h=T)
genotipo$Grupo <- as.factor(Grupo)
genotipo$Sexo <- as.factor(Sexo)
genotipo$SNP1_G <- as.factor(SNP1_G)
genotipo$SNP1_A <- as.factor(SNP1_A)
genotipo$SNP1_AA <- as.factor(SNP1_AA)
genotipo$SNP1_AG <- as.factor(SNP1_AG)
genotipo$SNP1_GG <- as.factor(SNP1_GG)

Segue uma imagem da situação do código 1



Segue uma imagem da situação do código 2



Aproveitando, também teria como alterar todas essas variáveis para qualitativas com um comando só, ao invés de ter que dar um comando para cada uma?

Obrigada,
Vanessa
avatar
Vanessa Escolano Maso

Mensagens : 3
Data de inscrição : 20/03/2018
Idade : 23
Localização : Ribeirão Preto - SP

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Funcao attach ou $?

Mensagem por Prof. Marcos em Sab Mar 31, 2018 7:52 am

Oi, Vanessa!

Então, você acabou de tropeçar em uma da situações nas quais o attach pode nos fazer errar se não prestarmos atenção. Wink

Considerando o seu código 1, o que acontece é que quando você usa um comando como:

Código:
Grupo <- as.factor(Grupo)

Você está fazendo duas coisas. O as.factor() está "chamando" a variável Grupo que faz parte do seu objeto genototipo - porque você usou attach(), então o R reconhece Grupo como algo que existe na memória.
Mas quando você salva o resultado do que fez (ou seja, quando você pega isso e coloca em "Grupo<-"), você cria um objeto chamado Grupo! :O

Então, no código 1, você agora tem Grupo duas vezes: genotipo$Grupo está dentro do objeto genotipo; e Grupo é um objeto à parte.

Se você não usasse um str() ou summary(), poderia continuar trabalhando sem nem perceber isso, e e possível que nada de errado fosse acontecer, pois todas as vezes que você fosse chamar a variável Grupo, iria chamar apenas com o nome mesmo, e o R chamaria a versão objeto, que passou pela transformação do as.factor.
Então não chega a ser um problemão, mas ilustra um pouco as questões que eu levantei, se usar o attach() em situações nas quais você altera as variáveis na planilha. Na prática isso pode não afetar em nada as suas análises, mas seria sim possível fazer alguma confusão sem querer...

No seu código 2, você alterou diretamente a variável Grupo (e as demais, o mesmo vale para todas) dentro de genotipo. Então o que acontece agora é que Grupo continua a existir apenas como parte do objeto genotipo, e tudo continua igual e funcionando normalmente como consequência do seu attach().

Em resumo: se eu crio um objeto com o mesmo nome que uma coluna de um conjunto de dados que passou por attach(), o objeto é algo superior na hierarquia do R, e ele passa a responder no lugar do nome da variável.

Acho que é isso! Smile
avatar
Prof. Marcos

Mensagens : 346
Data de inscrição : 23/12/2015
Idade : 37
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Funcao attach ou $?

Mensagem por GildaV em Ter Abr 03, 2018 12:02 pm

Puxa, acabei de ter esse problema em uma análise que eu estava tentando rodar de modelo misto! Eu não estava conseguindo alterar a variável resposta e não me dei conta que era por causa do attach! Exatamente isso - eu criei um objeto com o mesmo nome da variável!! Ainda bem que eu li essa discussão!

GildaV

Mensagens : 2
Data de inscrição : 04/10/2017

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Funcao attach ou $?

Mensagem por Prof. Marcos em Ter Abr 03, 2018 10:48 pm

GildaV escreveu:Puxa, acabei de ter esse problema em uma análise que eu estava tentando rodar de modelo misto! Eu não estava conseguindo alterar a variável resposta e não me dei conta que era por causa do attach! Exatamente isso - eu criei um objeto com o mesmo nome da variável!! Ainda bem que eu li essa discussão!

Pois é, este é o maior perigo do attach: achar que você alterou uma coluna do data frame, quando na verdade você criou uma nova variável... Sad

Mas que bom que você acompanhou a discussão!
avatar
Prof. Marcos

Mensagens : 346
Data de inscrição : 23/12/2015
Idade : 37
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Funcao attach ou $?

Mensagem por Valeria Andrade em Qua Abr 04, 2018 11:27 am

Obrigada Prof Marcos

Valeria Andrade

Mensagens : 57
Data de inscrição : 12/03/2018

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Funcao attach ou $?

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum