SORU
11 Mayıs 2011, ÇARŞAMBA


Ne kadar büyük R tekrarlanabilir bir örnek daha vermek?

Meslektaşları ile performans tartışma, öğretme, hata raporu gönderme veya e-posta listeleri rehberlik için arama burada, bir reproducible example sık sorulan ve her zaman yararlıdır.

Mükemmel bir örnek oluşturmak için ipuçları neler? Nasıl bir metin biçiminde veri yapıları yapıştırmak mı? Diğer bilgi eklemek için ne yapmalıyım?

dput(), dump() structure() kullanmanın yanı sıra başka numaralar da var mı? library() require() ifadeleri içermelidir? Özel amaçlı sözcükler, , *, *12cdf, vb ek olarak kaçınmalısınız?

Nasıl bir tekrarlanabilir mükemmel bir örnek yapar mı?

CEVAP
11 Mayıs 2011, ÇARŞAMBA


Az tekrarlanabilir bir örnek aşağıdaki öğelerden oluşur :

  • en az bir veri kümesi, hata yeniden oluşturmak için gerekli
  • en azçalıştırılabilirkodu verilen veri kümesi üzerinde çalıştırılabilen hata yeniden oluşturmak için gerekli.
  • kullanılan paketleri, R versiyonu üzerinde çalışan ve bu sistem hakkında gerekli bilgiler.
  • rasgele süreçler, geçerlilik için bir tohum (set.seed() set) durumu için

Yardım örneklere bakarak kullanılan fonksiyonları dosyalar genellikle yararlı olur. Genel olarak tüm kod orada verilen en az tekrarlanabilir bir örnek gereklerini yerine getirmek : veri sağlanmaktadır, çok az kod verilir, ve her şey çalıştırılabilir.

En az bir veri kümesi üretmek

Çoğu durumda, bu kolayca sadece bazı değerler ile vektör / bir dataframe sağlayarak yapılabilir. Ya da yerleşik en paketleri ile sağlanan veri setleri, birini kullanabilirsiniz.

Bir vektör yapmak kolay. Bazen bazı rastgele eklemek için gerekli, ve bu fonksiyonların bir bütün dizi var. sample() bir vektör rastgele, ya da sadece birkaç değerleri ile rastgele bir vektör verir. letters yararlı bir vektör alfabesi içeren. Bu faktörler yapmak için kullanılabilir.

Birkaç örnek :

  • rastgele değerler : normal dağılım için x <- rnorm(10), x <- runif(10) üniforma dağıtımı için, ...
  • bazı değerler permütasyon : vektör için x <- sample(1:10) rastgele 1:10.
  • rastgele bir faktör : x <- sample(letters[1:4], 20, replace = TRUE)

Matrisleri için, bir matrix(), örneğin kullanabilirsiniz :

matrix(1:10, ncol = 2)

Dataframes yapma data.frame() kullanılarak yapılabilir. Bir dikkat dataframe girişleri ödeme isim ve aşırı karmaşık hale getirmek için değil.

Bir örnek :

Data <- data.frame(
    X = sample(1:10),
    Y = sample(c("yes", "no"), 10, replace = TRUE)
)

Bazı sorular için, özel biçimler gerekli olabilir. Bu, bir as.someType sağlanan işlevleri kullanabilirsiniz: as.factor, as.Date, as.xts, ... vektör ve/veya dataframe hileler ile birlikte Bu.

Veri kopyalama

Eğer bazı veriler olacağını çok zor inşa kullanarak bu ipuçları, her zaman bir alt orijinal verileri kullanarak eg head(), subset() veya endeksleri. O zaman örneğin kullanın. dput() ABD R hemen konabilir bir şey vermek için :

> dput(head(iris,4))
structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6), Sepal.Width = c(3.5, 
3, 3.2, 3.1), Petal.Length = c(1.4, 1.4, 1.3, 1.5), Petal.Width = c(0.2, 
0.2, 0.2, 0.2), Species = structure(c(1L, 1L, 1L, 1L), .Label = c("setosa", 
"versicolor", "virginica"), class = "factor")), .Names = c("Sepal.Length", 
"Sepal.Width", "Petal.Length", "Petal.Width", "Species"), row.names = c(NA, 
4L), class = "data.frame")

Eğer veri çerçevesi olan bir faktör ile pek çok düzeyde, dput çıkış olabilir hantal çünkü hala liste, tüm olası faktör seviyeleri bile değiller şimdiki alt veri. Bu sorunu çözmek için, droplevels() işlevini kullanabilirsiniz. Türünün tek düzey bir faktördür nasıl aşağıda dikkat edin:

> dput(droplevels(head(iris, 4)))
structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6), Sepal.Width = c(3.5, 
3, 3.2, 3.1), Petal.Length = c(1.4, 1.4, 1.3, 1.5), Petal.Width = c(0.2, 
0.2, 0.2, 0.2), Species = structure(c(1L, 1L, 1L, 1L), .Label = "setosa",
class = "factor")), .Names = c("Sepal.Length", "Sepal.Width", 
"Petal.Length", "Petal.Width", "Species"), row.names = c(NA, 
4L), class = "data.frame")

En kötü durum senaryosu, read.table text parametresi kullanılarak okunabilir bir metin temsil verebiliriz :

zz <- "Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa"

Data <- read.table(text=zz, header = TRUE)

Az kod üretiyor

Bu işin kolay kısmı olmalı, ama bu pek sık olmaz. Yok, sana gereken şey :

  • veri dönüşümleri her türlü ekleyin. Sağlanan veriler zaten doğru biçimde olduğundan emin elbette sorun olmadığı sürece)
  • kopyala-yapıştır bir hata veriyor bu kodu tüm işlev / bir yığın. İlk satır tam olarak hata neden bulmaya çalışın. Sorunun ne olduğunu öğrenirsin daha sık kendini.

Ne yapmalısın biliyor

  • paketleri herhangi birini kullanıyorsanız kullanılacak ekleyin.
  • bağlantıları açmak veya dosyaları, bazı kodlar onları yakın ya da dosyaları silmek için Ekle (unlink() kullanarak)
  • eğer seçenekleri değiştirirseniz, kod ifadesi onları orijinal olanları geri dönmek içerdiğinden emin olun. (örneğin op <- par(mfrow=c(1,2)) ...some code... par(op) )
  • yeni, boş R oturumunda kodu kodu çalıştırılabilir olduğundan emin olmak için testrun. İnsanlar-yapıştır kopyala veri ve kod var tam olarak aynı konsol almak gerekir.

Ekstra bilgi vermek

Çoğu durumda, sadece R sürümü ve işletim sistemi yeterli olacaktır. Çatışmalar paketleri ile doğması sessionInfo() çıkış vermek gerçekten yardımcı olabilir. Diğer uygulamalar (ODBC veya başka bir şey üzerinden) bağlantıları hakkında konuşurken, bir de bu sürüm numaralarını vermelidir, ve mümkünse de kurulum hakkında gerekli bilgi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andytokkallos

    Andytokkallo

    27 Kasım 2007
  • superemposed

    superemposed

    25 Aralık 2007
  • TimMinchinLive

    TimMinchinLi

    23 ŞUBAT 2009