Versão estocástica do seq para gerar uma sequência de números / palavras aleatórios?

8

Algum tempo atrás eu usei uma ferramenta parecida com seq para imprimir uma seqüência de números gerados pseudo-aleatoriamente para stdout. Você pode especificar um intervalo, uma semente e o número de amostras e muito mais.

Acabei de esquecer o nome dessa ferramenta. Alguém pode me ajudar?

Talvez você conheça até mesmo uma ferramenta mais avançada que, por exemplo, suporte diferentes distribuições de probabilidade ou até mesmo a geração de uma sequência de palavras aleatórias sob diferentes alfabetos e distribuições de comprimento / caractere.

    
por maxschlepzig 24.08.2010 / 20:30

2 respostas

10

Você quer dizer jot?

$ jot 
jot: jot - print sequential or random data
usage:  jot [ options ] [ reps [ begin [ end [ s ] ] ] ]
Options:
    -r      random data
    -c      character data
    -n      no final newline
    -b word     repeated word
    -w word     context word
    -s string   data separator
    -p precision    number of characters

Se você usa o Ubuntu, o pacote é athena-jot. Um exemplo simples:

$ jot -r 10 12 27
26
13
22
18
25
12
13
23
15
23

Tchau.

    
por 24.08.2010 / 21:07
2

Se você não se incomoda em escrever um pequeno roteiro para fazer o que precisa, recomendamos fazê-lo em R , o sistema de estatísticas de código aberto.

Por exemplo, considere este one-liner para obter uma lista de 100 números distribuídos por Gaussian:

$ Rscript -e 'write(rnorm(100) * 100 + 100, "", 1)'
234.2903
-25.53289
168.0262
-28.49810
105.0687
85.97355
269.5072
...

Vamos analisar isso.

O comando padrão R leva você a um ambiente de programação interativo, o que é bom se você está tentando descobrir como fazer algo à mão ou está criando algo incrementalmente, mas a partir de sua pergunta, parece que você só precisa de uma lista de números para enviar para outro programa. Em vez disso, usamos Rscript , que se comporta mais como um interpretador de script Unix tradicional: você pode passar o nome de um arquivo contendo um script R ou usar o sinalizador -e padrão para passar todo o texto do programa no comando linha.

rnorm() é a função R para obter uma lista de números aleatórios com a distribuição "normal" ou gaussiana. Leva até três parâmetros, apenas o primeiro dos quais é necessário, quantos números você deseja. Pedimos 100. Tomando os padrões dos outros dois parâmetros opcionais, obtemos uma média de 0 e um desvio padrão de 1.

A aritmética depois disso é apenas mostrar um recurso interessante da linguagem R: você pode fazer aritmética em tabelas de dados inteiras, matrizes, etc., tão facilmente quanto um valor escalar em uma linguagem mais típica. Eu multipliquei todos os valores gerados por 100 e adicionei 100 a eles, só porque eu posso. Como R é uma linguagem de programação completa, não há limite para as coisas que você poderia fazer com essa lista de números. Essa é a vantagem de usar um sistema desse tipo em vez de um comando de finalidade fixa como jot .

Passamos o resultado dessa operação anterior para a função write() , que grava os dados em um arquivo por padrão, mas sobrescrevemos isso passando uma string em branco para o segundo parâmetro, o nome do arquivo, ele escreve a tabela para o terminal. O próximo parâmetro, 1 , apenas informa que queremos nossa saída no formato de coluna única.

R tem muitas outras funções de geração de números aleatórios criadas no sistema base. Por exemplo, podemos imitar o comando jot na resposta do lcpriani com este script:

$ Rscript -e 'write(round(runif(10, 12, 27)), "", 1)'

Aqui estamos usando runif() para obter 10 números aleatórios uniformemente distribuídos de 12 a 27. Como rnorm() , que usamos acima, essa função retorna valores de ponto flutuante, então temos que round() deles para os valores inteiros mais próximos antes de gravá-los na tela.

O R também possui um conjunto avançado de complementos no CRAN , um repositório de pacotes modelado no CPAN do Perl. Um que você pode se interessar é simplesmente chamado de aleatório , que funciona como uma interface para random.org , um serviço que retorna números aleatórios reais gerados a partir do ruído atmosférico.

R é um ambiente de programação completo, então pode ser que você não precise realmente obter seus números de R em formato de texto. Você pode resolver completamente o seu problema em R. Dê uma chance.

    
por 24.08.2010 / 21:35