¿Versión estocástica de seq para generar secuencia de números / palabras al azar?

10

Hace algún tiempo, utilicé una herramienta de tipo seq para imprimir una secuencia de números generados seudoaleatorios para stdout. Puede especificar un rango, semilla y el número de muestras y mucho más.

Acabo de olvidar el nombre de esta herramienta. ¿Puede alguien ayudarme?

Quizás conozca incluso una herramienta más avanzada que, por ejemplo, admite diferentes distribuciones de probabilidad o incluso la generación de una secuencia de palabras aleatorias bajo diferentes alfabetos y distribuciones de longitud / carácter.

maxschlepzig
fuente

Respuestas:

11

¿Quieres decir 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

Si usa Ubuntu, el paquete es athena-jot. Un simple ejemplo:

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

Adiós.

lcipriani
fuente
Sí, jota era esa orden, gracias! Nuevamente, agradezco otras sugerencias de herramientas de generación de secuencias más avanzadas.
maxschlepzig
2

Si no le importa escribir un pequeño script para hacer lo que necesita, le recomiendo hacerlo en R , el sistema de estadísticas de código abierto.

Por ejemplo, considere esta línea para obtener una lista de 100 números distribuidos en Gauss:

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

Analicemos esto.

El Rcomando estándar lo lleva a un entorno de programación interactivo, lo cual está bien si está tratando de averiguar cómo hacer algo a mano o si está creando algo de forma incremental, pero a partir de su pregunta, parece que solo necesita una lista de números para enviar a otro programa. Entonces, en su lugar, utilizamos Rscript, que se comporta más como un intérprete de script tradicional de Unix: puede pasarle el nombre de un archivo que contiene un script R, o usar la -ebandera estándar para pasar todo el texto del programa en la línea de comando.

rnorm()es la función R para obtener una lista de números aleatorios con la distribución "normal" o gaussiana. Se necesitan hasta tres parámetros, solo el primero de los cuales es necesario, cuántos números desea. Hemos pedido 100. Al tomar los valores predeterminados para los otros dos parámetros opcionales, obtenemos una media de 0 y una desviación estándar de 1.

La aritmética después de eso solo muestra una característica interesante del lenguaje R: puede hacer aritmética en tablas de datos completas, matrices, etc., tan fácilmente como un valor escalar en un lenguaje más típico. Multipliqué todos los valores generados por 100 y les agregué 100, solo porque puedo. Debido a que R es un lenguaje de programación completo, no hay límite para las cosas que podría hacer con esta lista de números. Esa es la ventaja de usar dicho sistema en lugar de un comando de propósito fijo como jot.

Pasamos el resultado de esa operación anterior a la write()función, que escribe los datos en un archivo de forma predeterminada, pero lo hemos anulado al pasar una cadena en blanco para el segundo parámetro, el nombre del archivo, por lo que escribe la tabla en la terminal en su lugar. El siguiente parámetro, 1simplemente le dice que queremos nuestra salida en formato de columna única.

R tiene muchas otras funciones de generación de números aleatorios integradas en el sistema base. Por ejemplo, podemos imitar el jotcomando en la respuesta de lcpriani con este script:

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

Aquí estamos usando runif()para obtener 10 números aleatorios distribuidos uniformemente del 12 al 27. Como rnorm(), que usamos anteriormente, esta función devuelve valores de punto flotante, por lo que tenemos que round()obtener sus valores enteros más cercanos antes de escribirlos en la pantalla.

R también tiene un rico conjunto de complementos en CRAN , un repositorio de paquetes modelado en el CPAN de Perl. Uno en el que podría estar interesado simplemente se llama aleatorio , que actúa como una interfaz para random.org , un servicio que devuelve verdaderos números aleatorios generados por el ruido atmosférico.

R es un entorno de programación completo, por lo que es posible que no necesite sacar sus números de R en formato de texto. Es posible que pueda resolver su problema por completo en R. Inténtelo.

Warren Young
fuente
¿Cuál es la forma R de obtener x números aleatorios de un intervalo dado? Por ejemplo, 100 números aleatorios entre 10 y 200 (por ejemplo, de la distribución normal)?
maxschlepzig
Agregué información sobre cómo imitar el jotcomando de lcpriani a la respuesta anterior. En cuanto a los valores límite para rnorm(), esa no es la forma en que funciona la distribución normal. Si toma la media predeterminada de 0 y SD de 1, 1000 sigue siendo un posible valor de retorno, es muy poco probable. R le permitiría escribir algo que sujete los valores para eliminar cosas fuera de un rango dado, pero entonces probablemente estaría haciendo un mal uso de la distribución normal.
Warren Young el