[Rio-pm] Chaves de hash

Renato Santos renato.cron em gmail.com
Quinta Novembro 29 14:21:48 PST 2012


http://perldoc.perl.org/functions/-X.html

procure por -d e por -e e por .... leia tudo!

2012/11/29 Aureliano Guedes <guedes_1000 em hotmail.com>

>  So aproveitando a oportunidade.
>
> Estou brincando com brinquedinhos novos.
> Mas ainda não entendi uma coisa.
>
> Aqui eu quero escrever na tela so o que for documento, não quero o que for
> diretorio.
> Na unha eu sei fazer, eu quero fazer isso usando o modulo Path::Class.
>
> Abaixo não esta dando muito certo.
> O que errei??
>
> use Path::Class;
>
> my $dir  = dir('Parse');
> my $s = $dir->open or die "cant open: $!";
> my @o = $s->read;
> foreach my $p (@o){
>     if ($p->file){
>         print $p;
>     }
> }
>
> > Date: Thu, 29 Nov 2012 19:52:45 -0200
>
> > From: thiagoglauco em ticursos.net
> > To: rio-pm em pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Só para ser chato:
> >
> > > popular um hash inteiro já com os grupos montados,
> >
> > popular
> > adj. 2 g.
> > 1. Relativo ou pertencente ao povo.
> > 2. Que é usado ou comum entre o povo.
> > 3. Que é do agrado do povo.
> > 4. Vulgar, notório.
> > 5. Democrático.
> > s. m.
> > 6. Homem do povo.
> >
> > povoar - Conjugar
> > (povo + -oar)
> > v. tr.
> > 1. Fundar povoações em.
> > 2. Estabelecer habitantes em.
> > 3. Disseminar animais para reprodução.
> > 4. Dispor grande quantidade de árvores em.
> > 5. Dispor grande quantidade de plantas (ex.: povoar o terreno de
> > vinha).
> >
> > >>>6. [Por extensão] Encher com determinada coisa (ex.: a notícia
> > >>> povoou a sua vida com alegria).
> >
> > v. pron.
> > 7. Encher-se de habitantes.
> >
> >
> > Em 2012-11-29 19:41, Renato Santos escreveu:
> > > Assim,
> > > não sei se tem muita diferença na memoria entre um $h e um %s,
> > >
> > > eu costumo usar $h por habito mesmo, mas poderia ser push
> > > @{$h{$grupo}} sem problemas, talvez até @$h{$grupo} funcione certo
> > >
> > > O 'evitar o loop' q eu digo, é você popular um hash inteiro já com os
> > > grupos montados, por exemplo ,se o grupo for a cada 10 numeros reais,
> > > voce poderia retornar
> > > "-30:-20" como chave para todos os valores de entrada dessa funcao, e
> > > popular tudo de uma vez só, no lugar de ler as chaves a cada pergunta
> > > de intervalo
> > >
> > > 2012/11/29 Aureliano Guedes <guedes_1000 em hotmail.com>
> > >
> > >> Renato, fiquei sem entender, no meu caso não esta fazendo so um
> > >> loop? E qual a diferença entre usar um hash %h ou tranformar $h em um
> > >> hash??
> > >> Desculpe as perguntas é que não faço nenhum curso ligado a
> > >> computação logo as vezes fico "boiando".
> > >>
> > >> Thiago, segue o script caso tenha também algo a
> > >> modificar/acrescentar a nível das minhas péssimas práticas.
> > >>
> > >> use warnings;
> > >> use strict;
> > >> use Path::Class;
> > >>
> > >> #Guardar os valores em um hash acessado pelo valor do mfe
> > >> sub h_energy{
> > >>     my $data = shift;
> > >>     my $file = file($data)->openr();
> > >>     my %hmfe = ();
> > >>     my $mirna;
> > >>     my $record;
> > >>
> > >>     while (my $linha = <$file>) {
> > >>         if ( $linha =~ m{target:.*} ) {
> > >>             $record = $linha . $record if ($record);
> > >>             $hmfe{$mirna} = $record if ($mirna);
> > >>             $mirna = $+{mirna};
> > >>             $record = q() if ($record);
> > >>         }
> > >>         elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
> > >>             $mirna = $1;
> > >>             $record .= $linha;
> > >>         }
> > >>          else {
> > >>             $record .= $linha;
> > >>          }
> > >>     }
> > >>     return %hmfe;
> > >> }
> > >>
> > >> sub termofilter{
> > >>     my ($data, $min, $max) = @_;
> > >>     my %d = h_energy($data);
> > >>
> > >>     foreach my $keys (keys %d){
> > >>         if($keys >= $min and $keys <= $max){
> > >>             print $keys . "n";
> > >>         }
> > >>     }
> > >> }
> > >> termofilter("hybrid.txt", "-30", "-20");
> > >>
> > >>> Date: Thu, 29 Nov 2012 17:27:15 -0200
> > >>
> > >>> From: thiagoglauco em ticursos.net
> > >>> To: rio-pm em pm.org
> > >> > Subject: Re: [Rio-pm] Chaves de hash
> > >>>
> > >>> Onde estou agora o firewall bloqueia o pastebin. Pela sua
> > >>> explicação,
> > >>> verificar por regex seria uma solução segura. O número sera
> > >>> convertido
> > >>> para um string e, se a sua regex prevê uma margem segura para a
> > >> > imprecisão do ponto flutuante na sua aplicação, funciona sem
> > >> problemas.
> > >>>
> > >>> Em 2012-11-29 16:59, Aureliano Guedes escreveu:
> > >>> > Nossa, aqui virou uma arena de ideias, da para aprender muita
> > >>> coisa
> > >> > > so lendo.
> > >>> >
> > >>> > O problema é o seguinte, eu tenho uma lista nesse formato:
> > >>> >
> > >>> > target: 01010101
> > >>> > length: 581
> > >>> > miRNA : hsa-miR-15a
> > >>> > length: 22
> > >> > >
> > >>> > mfe: -24.4 kcal/mol
> > >>> > p-value: 0.334111
> > >>> >
> > >>> > position 244
> > >>> > target 5' C UCUCCUGUGGUCUCU G U 3'
> > >>> > CACA GACCA GUGCUGUU
> > >>> > GUGU UUGGU CACGACGA
> > >> > > miRNA 3' AAUA U 5'
> > >>> >
> > >>> > Conforme este arquivo http://pastebin.com/9v6WFUT7 [1]
> > >>> >
> > >>> > Eu quero filtrar essa lista de acordo com o valor de mfe.
> > >> > >
> > >>> > Exemplo, se mfe for menor que -30 e maior que -20 esta dentro.
> > >>> >
> > >>> > Logo fiz da seguinte forma: http://pastebin.com/Dnhv0Zya [2]
> > >> > >
> > >>> > Funcionou, o problema era sono. Não percebi que a regex estava
> > >>> > pegando um espaço.
> > >>> >
> > >>> > Quanto a usar reais como chave de hash, se eu tiver dois reais
> > >>> iguais
> > >>> > poderá ser um problema para acessar os valores,
> > >> > > mas em toda regra existe sua exceção.
> > >>> >
> > >>> > No meu caso, o que me importa é que mfe esteja no intervalo
> > >>> > determinado.
> > >>> >
> > >>> > Caso descordem seria uma honra ler a explicação de qualquer um de
> > >> > > vocês.
> > >>> >
> > >>> >> Date: Thu, 29 Nov 2012 16:44:50 -0200
> > >>> >> From: thiagoglauco em ticursos.net
> > >>> >> To: rio-pm em pm.org
> > >> > >> Subject: Re: [Rio-pm] Chaves de hash
> > >>> >>
> > >>> >> Um exemplo mais preciso:
> > >>> >>
> > >>> >> $ uname -a
> > >>> >> SunOS cg01spo 5.10 Generic_138888-03 sun4v sparc
> > >> > >> SUNW,SPARC-Enterprise-T5120
> > >>> >>
> > >>> >> $ perl -E '
> > >>> >> if (0.2 > 0.19999999999999997){
> > >>> >> say "0.2 is greater than 0.19999999999999997";}
> > >> > >> else {
> > >>> >> say "Floating Point is not true real"};'
> > >>> >> 0.2 is greater than 0.19999999999999997
> > >>> >> $
> > >>> >>
> > >>> >> $ perl -E '
> > >> > >> if (0.2 > 0.19999999999999998){
> > >>> >> say "0.2 is greater than 0.19999999999999998";}
> > >>> >> else {
> > >>> >> say "Floating Point is not true real"};'
> > >> > >> Floating Point is not true real
> > >>> >> $
> > >>> >>
> > >>> >> Por que é importante saber essas coisas?
> > >>> >> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html [3]
> > >> > >>
> > >>> >>
> > >>> >>
> > >>> >>
> > >>> >>
> > >>> >>
> > >>> >> Em 2012-11-29 15:13, thiagoglauco em ticursos.net escreveu:
> > >> > >> >> Não se compara reais por igualdade.
> > >>> >> > Se você tem erro na igualdade, terá nas outras comparações se
> > >>> a
> > >>> >> > diferença entre os números for menor que o maior acréscimo
> > >> > >> suportado
> > >>> >> > pela plataforma:
> > >>> >> >
> > >>> >> > $ perl -E '
> > >>> >> > if (0.2 > 0.19999999999999999999999999999999999999999999){
> > >>> >> >> say "0.2 is greater than
> > >> > >> 0.19999999999999999999999999999999999999";}
> > >>> >> >> else {
> > >>> >> >> say "Floating Point is not true real"};'
> > >>> >> > Floating Point is not true real
> > >> > >> > $
> > >>> >> >
> > >>> >> > $ perl -E '
> > >>> >> > if (0.2 > 0.199999){
> > >>> >> > say "0.2 is greater than 0.199999";}
> > >>> >> > else {
> > >> > >> > say "Floating Point is not true real"};'
> > >>> >> > 0.2 is greater than 0.199999
> > >>> >> > $
> > >>> >> >
> > >>> >> > Então, comparar pontos flutuantes não é seguro. Nem igualdade,
> > >>> nem
> > >> > >> > maio, nem menor.
> > >>> >> >
> > >>> >> > E mais: garanto que se você quer usar um número real como
> > >>> chave de
> > >>> >> > Hash você tem um problema na análise da lógica do problema que
> > >> > >> está
> > >>> >> > enfrentando e como solucioná-lo.
> > >>> >> >
> > >>> >> >
> > >>> >> > Em 2012-11-29 10:36, Blabos de Blebe escreveu:
> > >>> >> >> Na verdade é o contrário, não?
> > >> > >> >>
> > >>> >> >> Não se compara reais por igualdade.
> > >>> >> >>
> > >>> >> >> Se você usa reais como chaves de hash, você tem algum
> > >>> problema...
> > >>> >> >>
> > >> > >> >> Ao não controlar a representação interna em ponto flutuante,
> > >> você
> > >>> >> >> pode
> > >>> >> >> nunca mais alcançar o valor relacionado à chave, se usar um
> > >>> >> número
> > >> > >> >> real como chave, pois qualquer bit diferente, mesmo que
> > >>> >> arredondando
> > >>> >> >> no mesmo número vai resultar num cálculo diferente na tabela
> > >>> >> hash.
> > >> > >> >>
> > >>> >> >> Igualdade entre númros reais constuma ser definida como algo
> > >>> >> assim:
> > >>> >> >>
> > >>> >> >> sub float_equal {
> > >>> >> >> my ($first, $second) = @_;
> > >> > >> >> my $threshold = 0.00000001 # arbitrário
> > >>> >> >> return abs( $first - $second ) < $threshold;
> > >>> >> >> }
> > >>> >> >>
> > >>> >> >> Converter para string antes de usar como chave de hash também
> > >>> não
> > >> > >> me
> > >>> >> >> parece saudável, pois, embora a string vá funcionar bem no
> > >>> hash,
> > >>> >> >> você
> > >>> >> >> não garante que a conversão vai resultar sempre na mesma
> > >>> string,
> > >> > >> e
> > >>> >> >> aí
> > >>> >> >> vc se ferra do mesmo jeito.
> > >>> >> >>
> > >>> >> >> Por outro lado, se você nunca vai acessar o elemento do hash
> > >>> >> através
> > >> > >> >> da chave, um foreach por keys() ou values() vai te retornar
> > >> os
> > >>> >> >> valores...
> > >>> >> >>
> > >>> >> >> Mas aí eu te perguntaria por que rails você está usando hash
> > >>> pra
> > >> > >> >> isso...
> > >>> >> >>
> > >>> >> >>
> > >>> >> >>
> > >>> >> >> On Thu, Nov 29, 2012 at 6:47 AM, <thiagoglauco em ticursos.net>
> > >> > >> wrote:
> > >>> >> >>> Existe um problema aqui, diferente da comparação.
> > >>> >> >>> A comparação de reais é problemática devido a estrutura
> > >>> interna
> > >>> >> do
> > >>> >> >>> ponto
> > >> > >> >>> flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não
> > >> é do
> > >>> >> >>> Perl, mas
> > >>> >> >>> das regras de aproximação usada pelos processadores.
> > >>> >> >>>
> > >> > >> >>> Rounding rules
> > >>> >> >>>
> > >>> >> >>> The standard defines five rounding rules. The first two
> > >>> round to
> > >>> >> a
> > >>> >> >>> nearest
> > >> > >> >>> value; the others are called directed roundings:
> > >>> >> >>> Roundings to nearest
> > >>> >> >>>
> > >>> >> >>> Round to nearest, ties to even – rounds to the nearest
> > >>> value;
> > >> > >> >>> if the
> > >>> >> >>> number falls midway it is rounded to the nearest value with
> > >>> an
> > >>> >> even
> > >>> >> >>> (zero)
> > >>> >> >>> least significant bit, which occurs 50% of the time; this is
> > >>> the
> > >> > >> >>> default for
> > >>> >> >>> binary floating-point and the recommended default for
> > >>> decimal.
> > >>> >> >>> Round to nearest, ties away from zero – rounds to the
> > >>> nearest
> > >> > >> >>> value; if
> > >>> >> >>> the number falls midway it is rounded to the nearest value
> > >>> above
> > >>> >> >>> (for
> > >>> >> >>> positive numbers) or below (for negative numbers); this is
> > >> > >> intended
> > >>> >> >>> as an
> > >>> >> >>> option for decimal floating point.
> > >>> >> >>>
> > >>> >> >>> Directed roundings
> > >>> >> >>>
> > >> > >> >>> Round toward 0 – directed rounding towards zero (also known
> > >> as
> > >>> >> >>> truncation).
> > >>> >> >>> Round toward +∞ – directed rounding towards positive
> > >>> infinity
> > >> > >> >>> (also
> > >>> >> >>> known as rounding up or ceiling).
> > >>> >> >>> Round toward −∞ – directed rounding towards negative
> > >>> infinity
> > >>> >> >>> (also
> > >> > >> >>> known as rounding down or floor).
> > >>> >> >>>
> > >>> >> >>> Se a comparação for inevitável, converta o seu número para
> > >>> >> string e
> > >>> >> >>> compare
> > >> > >> >>> ou determine um nível de precisão aceitável e faça bit a
> > >> bit.
> > >>> >> >>>
> > >>> >> >>> Em 2012-11-28 21:42, Aureliano Guedes escreveu:
> > >>> >> >>>>
> > >> > >> >>>> Ola Monges.
> > >>> >> >>>>
> > >>> >> >>>> Estou com um problema simples mas que não acho a solução.
> > >>> >> >>>>
> > >>> >> >>>> Eu tenho um hash onde as chaves são valores numericos reais
> > >>> (a
> > >> > >> >>>> maioria negativo e quase nenhum inteiro).
> > >>> >> >>>> Estou limitando esses valores por um maximo e um minimo.
> > >>> >> >>>>
> > >>> >> >>>> foreach my $keys (keys %d) {
> > >> > >> >>>> if ($keys <= $min and $keys >= $max) {
> > >>> >> >>>> print "$d{$keys}";
> > >>> >> >>>> }
> > >>> >> >>>> }
> > >>> >> >>>>
> > >> > >> >>>> Problema que não da certo.
> > >>> >> >>>> Ha algo de errado aqui??
> > >>> >> >>>>
> > >>> >> >>>> _______________________________________________
> > >> > >> >>>> Rio-pm mailing list
> > >>> >> >>>> Rio-pm em pm.org
> > >>> >> >>>> http://mail.pm.org/mailman/listinfo/rio-pm [4]
> > >> > >> >>>
> > >>> >> >>>
> > >>> >> >>> _______________________________________________
> > >>> >> >>> Rio-pm mailing list
> > >>> >> >>> Rio-pm em pm.org
> > >> > >> >>> http://mail.pm.org/mailman/listinfo/rio-pm [4]
> > >>> >> >> _______________________________________________
> > >> > >> >> Rio-pm mailing list
> > >> > >> >> Rio-pm em pm.org
> > >>> >> >> http://mail.pm.org/mailman/listinfo/rio-pm [4]
> > >> > >> >
> > >>> >> > _______________________________________________
> > >>> >> > Rio-pm mailing list
> > >>> >> > Rio-pm em pm.org
> > >> > >> > http://mail.pm.org/mailman/listinfo/rio-pm [4]
> > >>> >>
> > >>> >> _______________________________________________
> > >> > >> Rio-pm mailing list
> > >> > >> Rio-pm em pm.org
> > >>> >> http://mail.pm.org/mailman/listinfo/rio-pm [4]
> > >>> >
> > >> > > _______________________________________________
> > >>> > Rio-pm mailing list
> > >>> > Rio-pm em pm.org
> > >>> > http://mail.pm.org/mailman/listinfo/rio-pm [4]
> > >> >
> > >>> _______________________________________________
> > >>> Rio-pm mailing list
> > >>> Rio-pm em pm.org
> > >>> http://mail.pm.org/mailman/listinfo/rio-pm [4]
> > >>
> > >> _______________________________________________
> > >> Rio-pm mailing list
> > >> Rio-pm em pm.org
> > >> http://mail.pm.org/mailman/listinfo/rio-pm [4]
> > >
> > > --
> > >
> > > Saravá,
> > > Renato CRON
> > >
> > > http://www.renatocron.com/blog/ [5]
> > > @renato_cron [6]
> > >
> > >
> > > Links:
> > > ------
> > > [1] http://pastebin.com/9v6WFUT7
> > > [2] http://pastebin.com/Dnhv0Zya
> > > [3] http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
> > > [4] http://mail.pm.org/mailman/listinfo/rio-pm
> > > [5] http://www.renatocron.com/blog/
> > > [6] http://twitter.com/#!/renato_cron
> > >
> > > _______________________________________________
> > > Rio-pm mailing list
> > > Rio-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/rio-pm
> >
> > _______________________________________________
> > Rio-pm mailing list
> > Rio-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron <http://twitter.com/#!/renato_cron>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20121129/6fa500cf/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm