Programa R para Biologia da Conservação
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Funcao attach ou $?

4 participantes

Ir para baixo

Funcao attach ou $? Empty Funcao attach ou $?

Mensagem por Valeria Andrade 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 : 94
Data de inscrição : 12/03/2018

Ir para o topo Ir para baixo

Funcao attach ou $? Empty Re: Funcao attach ou $?

Mensagem por Prof. Marcos 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?
Prof. Marcos
Prof. Marcos

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

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Funcao attach ou $? Empty Re: Funcao attach ou $?

Mensagem por Vanessa Escolano Maso Sáb 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

Funcao attach ou $? Attach10

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

Funcao attach ou $? Objeto10

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
Vanessa Escolano Maso
Vanessa Escolano Maso

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

Ir para o topo Ir para baixo

Funcao attach ou $? Empty Re: Funcao attach ou $?

Mensagem por Prof. Marcos Sáb 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
Prof. Marcos
Prof. Marcos

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

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Funcao attach ou $? Empty Re: Funcao attach ou $?

Mensagem por GildaV 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

Ir para o topo Ir para baixo

Funcao attach ou $? Empty Re: Funcao attach ou $?

Mensagem por Prof. Marcos 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!
Prof. Marcos
Prof. Marcos

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

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Funcao attach ou $? Empty Re: Funcao attach ou $?

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

Obrigada Prof Marcos

Valeria Andrade

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

Ir para o topo Ir para baixo

Funcao attach ou $? Empty Re: Funcao attach ou $?

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos