Her kod bloğundan önce mi, yoksa proje başına bir mi?


13

Sonuçların çoğaltılabilmesi için rastgele bir tohum ayarlamak standart bir tavsiyedir. Bununla birlikte, yalancı rasgele sayılar çizilirken tohum ilerletildiğinden, herhangi bir kod parçası ek bir sayı çekerse sonuçlar değişebilir .

İlk bakışta, sürüm kontrolü, bunun için bir çözüm gibi görünüyor, çünkü en azından notlarınıza veya kağıdınızdaki sonuçları yazdığınızda sürümü geri döndürüp yeniden oluşturmanıza izin verecektir. Ancak, işleri karıştırmak sadece bir çizim gerektirdiğinden, R'yi güncellerseniz sonuçlar da değişebilir.

Bunun nadir durumlarda sadece sorunlu olduğunu anlıyorum, ancak burada en iyi uygulamalar olup olmadığını merak ediyorum. Bu kendi işimde mücadele ettiğim bir şey.

Yanıtlar:


8

Kodu nasıl çalıştıracağınıza veya rasgele sayılar rasgele bir şekilde çizdiği için biraz stokastik olan bir kod olup olmadığına bağlıdır. (Bunun bir örneği, vegan paketimizdeki, yalnızca bir sonucun Tip II hata oranını hesaba katarak belirtilen Tip I hatadan farklı olup olmadığını bilmek için yeterli veri toplayana kadar izin vermeye devam ettiğimiz permütasyon testleridir .) çekilişleri etkilememeli ...

Son komut dosyası yalnızca bir toplu iş olarak veya bütünüyle çalıştırılacaksa ve sözde rasgele sayı üretecinden stokastik çekiliş yoksa, komut dosyasının en üstüne bir tohum koymak ve onu bütünüyle çalıştırmak güvenlidir. .

Kodda ilerlemek istiyorsanız, belki de blokları yeniden çalıştırmak set.seed(), sözde rastgele sayı üretecinden çekilecek her işlev çağrısından önce bir çağrı yapmanız gerekir .

Bilimsel makalelerim için rutin olarak süper savunmaya geçiyorum ve her kod yığınından önce tohumlar ayarlıyorum; bu, komut dosyasının daha sonraki bir tarihte mevcut komut dosyasına eklenmesi gerekebilecek güncellemelere izin verir - diyelim ki gözden geçirenlerin veya yazarların yorumlarına yanıt verin.

Sonuçlarınız, belirli bir pseduo-rastgele değer kümesine bağlı olmayacaktır, bu nedenle sorun bir raporda veya makalede belirtilen kesin değerleri yeniden üretebilmektedir. Süper savunmacı olmanıza ve her kod yığınına bir tohum ayarlamanıza rağmen, yine de tam kurulumu yeniden oluşturmanız gerekebilir --- R sürümü ve paket sürümleri, böylece bu ayrıntıları kaydetmek önemlidir. Ekstra güvenli olmak için önceki R sürümlerini ve paketlerini belirli projeler / belgeler için saklamanız gerekir. Gerçekten, birçok insan bunu yapıyor.


+1. Son paragraf yeniden: tüm gereksiz dosyaları kaydetmek zorunda değilsiniz ve tüm bir kurulumu yeniden oluşturmak zorunda değilsiniz. Hangi RNG'yi kullandığınız konusunda spesifikseniz, varsayılanları kabul etmek yerine, (1) bu RNG'nin kaynak kodu (genellikle kısa) ve (2) her önemli noktada RNG'nin durumu . Çoğu Riş için bu durum bulunabilir .Random.seed. En büyük endişem R, bazı rutinlerin bunu atlatması ve belki de set.seedbazı durumlarda tamamen göz ardı edebilmesidir .
whuber

2
@whuber Daha genel olarak orada düşünüyordum - eğer endişe kesin sonuç kümesini yeniden üretiyorsa, R'nin sürümüne ve kullanılan paketlerin sürümlerine ihtiyacınız olacaktır. Katiyen; R 3.0.0, değerleri bildirdiği hassasiyeti değiştirdi - büyük değil, ancak çok fazla hassasiyet varsaydığı birçok paket kontrol testini atmak için yeterliydi. Ayrıca, paketler düzenli olarak güncellenir ve işler değişir.
Gavin Simpson
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.