Rastgele sayılar / kelimeler dizisi oluşturmak için seq'ın stokastik versiyonu?


10

Bir süre önce stdout'a rastgele rasgele oluşturulmuş sayılar dizisi yazdırmak için seq benzeri bir araç kullandım. Bir aralık, tohum, örnek sayısı ve çok daha fazlasını belirtebilirsiniz.

Bu aracın adını unuttum. Biri bana yardım edebilir mi?

Belki de farklı olasılık dağılımlarını veya hatta farklı alfabe ve uzunluk / karakter dağılımları altında rastgele bir kelime dizisinin oluşturulmasını destekleyen daha gelişmiş bir araç bile biliyorsunuzdur.

Yanıtlar:


11

Şunu mu demek istediniz: 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

Ubuntu kullanıyorsanız paket athena-jot'tur. Basit bir örnek:

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

Hoşçakal.


evet, jot bu emirdi , teşekkürler! Yine, daha gelişmiş dizi oluşturma araçlarının önerilerini takdir ediyorum.
maxschlepzig

2

İhtiyacınız olanı yapmak için küçük bir komut dosyası yazmanın sakıncası yoksa, bunu açık kaynaklı istatistik sistemi olan R'de yapmanızı öneririm .

Örneğin, 100 Gauss dağıtılmış sayının bir listesini almak için bu tek astarı düşünün:

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

Bunu parçalayalım.

Standart Rkomut sizi etkileşimli bir programlama ortamına getirir, bu da elle bir şey nasıl yapacağınızı veya kademeli olarak bir şeyler oluşturmaya çalışıyorsanız iyi bir şeydir, ancak sorunuzdan, sadece bir sayı listesine ihtiyacınız var gibi görünüyor başka bir programa göndermek için. Bunun yerine, Rscriptdaha çok geleneksel bir Unix kod yorumlayıcısı gibi davranıyoruz: R komut dosyası içeren bir dosyanın adını -eiletebilir veya tüm program metnini komut satırına iletmek için standart bayrağı kullanabilirsiniz .

rnorm()"Normal" veya Gauss dağılımıyla rastgele sayıların bir listesini almak için R işlevidir. Sadece birincisi gerekli olan üç parametreye kadar, kaç sayı istediğinizi alır. 100 istedik. Diğer iki isteğe bağlı parametre için varsayılanları alarak ortalama 0 ve standart sapma 1 elde ederiz.

Bundan sonra aritmetik sadece R dilinin havalı bir özelliğini gösteriyor: daha tipik bir dilde skaler bir değer kadar kolay bir şekilde tüm veri tabloları, matrisler, vb. Oluşturduğum tüm değerleri 100 ile çarptım ve 100'ü ekledim, çünkü yapabilirim. R tam teşekküllü bir programlama dili olduğundan, bu sayı listesiyle yapabileceğiniz şeylerin bir sınırı yoktur. Böyle bir sistem gibi sabit amaçlı bir komut kullanmanın avantajı budur jot.

Önceki işlemin sonucunu write(), verileri varsayılan olarak bir dosyaya yazan işleve geçiririz, ancak ikinci parametre olan dosya adı için boş bir dize geçirerek tabloyu terminal yerine. Bir sonraki parametre, 1çıktımızı tek sütun biçiminde istediğimizi söyler.

R, temel sistemde yerleşik birçok rastgele sayı üretme fonksiyonuna sahiptir. Örneğin, bu jotkomut dosyasıyla lcpriani'nin cevabındaki komutu taklit edebiliriz :

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

Burada runif()12'den 27'ye kadar eşit dağılmış 10 rasgele sayı elde etmek için kullanıyoruz. rnorm()Yukarıda da kullandığımız gibi, bu fonksiyon kayan nokta değerleri döndürür, bu yüzden round()onları ekrana yazmadan önce onlara en yakın tam sayı değerlerine ihtiyacımız vardır.

R'nin ayrıca Perl CPAN'da modellenmiş bir paket deposu olan CRAN'da zengin bir eklenti seti var. İlginizi çekebilecek birine rastgele denir , bu da atmosfer gürültüsünden üretilen gerçek rasgele sayıları döndüren random.org'a bir arayüz görevi görür .

R tam bir programlama ortamıdır, bu yüzden sayılarınızı metin formatında R'den çıkarmanıza gerek olmayabilir. Sorununuzu tamamen R'de çözebilirsiniz. Bir şans verin.


Belirli bir aralıktan x rastgele sayı almanın R yolu nedir? Örneğin 10 ile 200 arasında 100 rastgele sayı (örneğin normal dağılımdan)?
maxschlepzig

jotYukarıdaki cevaba lcpriani komutunu taklit etme hakkında bilgi ekledim . Değerleri sınırlamaya gelince rnorm(), normal dağılım böyle değildir. Varsayılan ortalama 0 ve SD 1'i alırsanız, 1000 yine de olası bir dönüş değeridir, bu son derece düşüktür. R, belirli bir aralığın dışındaki şeyleri kaldırmak için değerleri kelepçeleyecek bir şey yazmanıza izin verir, ancak muhtemelen normal dağılımı kötüye kullanırsınız.
Warren Young
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.