Soru Harika bir R tekrarlanabilir örnek nasıl yapılır?


Performansı meslektaşlarınızla tartışırken, öğretirken, bir hata raporu gönderirken veya posta listelerinde rehberlik ararken ve burada SO, tekrarlanabilir örnek sık sorulur ve her zaman yararlı olur.

Mükemmel bir örnek oluşturmaya yönelik ipuçlarınız neler? Veri yapılarını nasıl yapıştırırsınız?  bir metin biçiminde? Başka hangi bilgileri eklemelisiniz?

Kullanmaya ek olarak başka hileler var mı dput(), dump() veya structure()? Ne zaman eklemelisiniz library() veya require() ifadeleri? Ek olarak, hangi saklı sözcüklerden kaçınılmalıdır? c, df, data, vb?

Biri nasıl harika yapar?  tekrarlanabilir örnek?


2381


Menşei


Sorunun kapsamı konusunda kafam karıştı. Kişiler, SO veya R-help (“hatayı yeniden üretme”) hakkında soru sorma konusunda tekrarlanabilir örneklerin yorumlanmasından bıkmış gibi görünmektedir. Yardım sayfalarında tekrarlanabilir R örnekleri nelerdir? Paket demolarında mı? Öğreticiler / sunumlarda mı? - baptiste
@baptiste: Aynı eksi hata. Açıkladığım tüm teknikler paket yardım sayfalarında ve R hakkında verdiğim derslerde ve sunumlarda kullanılır. - Joris Meys
Veri, bazen simüle etmek için çok karmaşık olabileceğinden, sınırlayıcı faktördür. Özel verilerden genel veriler üretmek için: stackoverflow.com/a/10458688/742447 içinde stackoverflow.com/questions/10454973/... - Etienne Low-Décarie


Cevaplar:


Minimal bir tekrarlanabilir örnek, aşağıdakilerden oluşur:

  • hatayı çoğaltmak için gerekli olan minimum bir veri kümesi
  • minimal çalıştırılabilir Verilen veri kümesinde çalıştırılabilen hatayı yeniden üretmek için gerekli kod.
  • Kullanılan paketler, R sürümü ve çalıştırıldığı sistem hakkında gerekli bilgiler.
  • rastgele süreçler durumunda, bir tohum set.seed()) tekrarlanabilirlik için

Kullanılan fonksiyonların yardım dosyalarındaki örneklere bakmak genellikle yararlıdır. Genel olarak, orada verilen tüm kodlar, minimum düzeyde tekrarlanabilir bir örnekteki gereksinimleri karşılar: veri sağlanır, minimum kod sağlanır ve her şey çalıştırılabilir.

Minimum veri kümesi üretme

Çoğu durumda, bu sadece bazı değerler içeren bir vektör / veri çerçevesi sağlayarak kolayca yapılabilir. Veya çoğu paketle sağlanan yerleşik veri kümelerinden birini kullanabilirsiniz.
Yerleşik veri kümelerinin kapsamlı bir listesi ile görülebilir library(help = "datasets"). Her veri kümesine kısa bir açıklama vardır ve örneğin daha fazla bilgi edinilebilir. ?mtcars 'mtcars' listesindeki veri kümelerinden biridir. Diğer paketler ek veri kümeleri içerebilir.

Bir vektör yapmak kolaydır. Bazen ona bir rastgelelik eklemek gerekiyor ve bunu yapmak için çok sayıda fonksiyon var. sample() Bir vektörü rasgele hale getirebilir veya sadece birkaç değeri olan rastgele bir vektör verebilir. letters alfabe içeren kullanışlı bir vektördür. Bu faktörleri yapmak için kullanılabilir.

Birkaç örnek:

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

Matrisler için, bir kullanabilirsiniz matrix(), Örneğin :

matrix(1:10, ncol = 2)

Veri çerçeveleri yapmak data.frame(). Veri çerçevesindeki girdileri adlandırmaya ve aşırı karmaşık hale getirmemeye dikkat etmeliyiz.

Bir örnek :

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

Bazı sorular için, belirli formatlara ihtiyaç olabilir. Bunlar için, sağlananlardan herhangi biri kullanılabilir as.someType fonksiyonlar: as.factor, as.Date, as.xts, ... Bunlar vektör ve / veya veri çerçeve hileleri ile birlikte.

Verilerinizi kopyalayın

Bu ipuçlarını kullanarak oluşturmak çok zor olacak bazı verileriniz varsa, örneğin orijinal verilerinizin bir alt kümesini head(), subset()veya endeksler. Öyleyse ör. dput() R'ye hemen verilebilecek 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")

Veri çerçevenizde birçok seviyeli bir faktör varsa, dput Çıktısı, verilerinizin alt kümesinde bulunmasalar bile tüm olası faktör seviyelerini listeleyeceği için hantal değildir. Bu sorunu çözmek için droplevels() işlevi. Türlerin sadece bir seviye ile nasıl bir faktör olduğunu fark 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")

İçin bir başka uyarı dput anahtarlanmış için çalışmayacak data.table nesneler veya gruplandırılmış tbl_df (sınıf grouped_df) dplyr. Bu durumlarda, paylaşmadan önce düzenli bir veri çerçevesine dönebilirsiniz. dput(as.data.frame(my_data)).

En kötü durum senaryosunu kullanarak, okunurken okunabilecek bir metin temsili verebilirsiniz. text parametresi read.table :

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)

Minimum kod üretme

Bu kolay kısım olmalı ama çoğu zaman değil. Yapmamanız gereken şey:

  • her türlü veri dönüşümünü ekleyin. Sağlanan verilerin zaten doğru biçimde olduğundan emin olun (tabii ki sorun değilse)
  • Tüm işlevi kopyala yapıştırın / hata veren bir kod parçası. İlk olarak, hangi satırların tam olarak hatayla sonuçlandığını bulmaya çalışın. Daha sık sık, sorunun kendinizin ne olduğunu öğreneceksiniz.

Yapman gereken şey:

  • Eğer kullanıyorsanız, hangi paketlerin kullanılması gerektiğini ekleyin library())
  • Bağlantı açarsanız veya dosya oluşturursanız, kapatmak için bir kod ekleyin veya dosyaları silin ( unlink())
  • Seçenekleri değiştirirseniz, kodun orijinallerine geri döndürmek için bir ifade içerdiğinden emin olun. (Örneğin op <- par(mfrow=c(1,2)) ...some code... par(op) )
  • Test kodunuzun çalıştırılabilir olduğundan emin olmak için kodunuzu yeni, boş bir R oturumunda çalıştırın. Kişiler, verilerinizi ve kodunuzu konsolda kopyalayıp yapıştırabilmeli ve tıpkı sahip olduğunuzla aynı şekilde olmalıdır.

Ek bilgi ver

Çoğu durumda, sadece R sürümü ve işletim sistemi yeterli olacaktır. Paketlerle çatışmalar ortaya çıktığında, sessionInfo() gerçekten yardımcı olabilir. Diğer uygulamalara bağlantılar (ODBC veya başka bir şey aracılığıyla) hakkında konuştuğunuzda, bunlara ayrıca sürüm numaraları ve eğer mümkünse kurulum hakkındaki gerekli bilgiler de sağlanmalıdır.

Eğer R kullanıyorsanız R Stüdyo kullanma rstudioapi::versionInfo() RStudio sürümünüzü bildirmenizde yardımcı olabilir.

Belli bir paketle ilgili bir probleminiz varsa, paketin sürümünü vermek için paketin sürümünü vermek isteyebilirsiniz. packageVersion("name of the package").


1454



Nasıl kullanıyorsun dput Eğer veri çerçevesi çok büyükse ve sorun veri tabanının ortasından mı oluşturuluyor? Kullanmanın bir yolu var mı dput Verilerin orta bölümünü çoğaltmak için 60 ile 70 arası satırlar mı söylüyorsunuz? - BgnR
@BgnR Veri çerçevesinin bir kısmını indeksleri kullanarak çıkarabilirsiniz, örneğin: tmp <- mydf[50:70,] bunu takiben dput(mydf). Veri çerçevesi gerçekten büyükse, sorunu yalıtmayı deneyin ve yalnızca soruna neden olan birkaç satırı gönderin. - Joris Meys
@JorisMeys: Söylemenin bir yolu var mı head veya dput Verileri N seviyesine tekrar tekrar sınırlamak için? Tekrarlanabilir bir örnek oluşturmaya çalışıyorum ve verilerim veri karelerinin bir listesi. Yani, dput(head(myDataObj)) 14MB büyüklüğünde bir çıktı dosyası oluşturduğu için yeterli görünmüyor. - Aleksandr Blekh
@JorisMeys: Sadece FYI - Yukarıdaki yorumda ayrı bir soru olarak gönderilen soru: stackoverflow.com/questions/25127026/.... - Aleksandr Blekh
@Konrad Yapabileceginiz en iyi sey, dosyaya baglanir ve o dosyada okumak için asgari komutu verir. Bu, dput () çıktısını kopyalamaktan daha az güçlük çekecektir. - Joris Meys


(İşte benim tavsiyem Tekrarlanabilir bir örnek nasıl yazılır . Kısa ama tatlı yapmaya çalıştım.)

Tekrarlanabilir bir örnek nasıl yazılır.

Tekrarlanabilir bir örnek sağlamanız durumunda, R sorununuzla ilgili olarak size yardımcı olacaksınız. Tekrarlanabilir bir örnek, bir başkasının yalnızca R kodu kopyalayıp yapıştırarak sorununuzu yeniden oluşturmasına izin verir.

Örneğinizi tekrarlanabilir hale getirmek için eklemeniz gereken dört şey vardır: gerekli paketler, veriler, kod ve R ortamınızın açıklaması.

  • Paketlerkomut dosyasının en üstünde yüklenmelidir, bu yüzden kolay Örneklerin hangisine ihtiyaç duyduğunu görün.

  • Eklemenin en kolay yolu veri bir e-postada veya Yığın Taşması sorusu kullanmaktır dput() üretmek Yeniden oluşturmak için R kodu. Örneğin, yeniden oluşturmak için mtcars R veri kümesi, Aşağıdaki adımları gerçekleştiririm:

    1. Koşmak dput(mtcars) R içinde
    2. Çıkışı kopyalayın
    3. Yeniden üretilebilir komutumda, yazın mtcars <- sonra yapıştırın.
  • Emin olmak için biraz zaman harcayın kod diğerleri için kolaydır okuyun:

    • boşluk kullandığınızdan ve değişken adlarınızın kısa olduğundan emin olun, ancak bilgi verici

    • Sorununuzun nerede olduğunu belirtmek için yorumları kullanın

    • Sorunla ilgili olmayan her şeyi kaldırmak için elinizden geleni yapın.
      Kodunuz ne kadar kısaysa, anlaşılması o kadar kolay olur.

  • Çıktısını dahil et sessionInfo() kodunuzdaki bir yorumda. Bu, özetler R, çevre güncelliğini kullanıp kullanmadığınızı kontrol etmeyi kolaylaştırır paketi.

Taze bir R oturumu başlatarak ve komut dosyanızı yapıştırarak gerçekten tekrarlanabilir bir örnek oluşturduğunuzu kontrol edebilirsiniz.

Tüm kodunuzu bir e-postaya koymadan önce Gist github . Kodunuzu güzel sözdizimi vurgulayacak ve e-posta sistemi tarafından karıştırılan bir şey hakkında endişelenmenize gerek yok.


514



reprex içinde tidyverse minimal, tekrarlanabilir örnek üretmek için iyi bir pakettir: github.com/tidyverse/reprex - mt1022
Neden kodu e-postaya koyan? - Gilgamesh
Bende rutin olarak kod içeren e-postalar alıyorum. Hatta kod içeren ekli word belgeleri ile e-postalar aldım. Bazen SCREENSHOTS kod içeren ekli word belgeleri ile e-postalar bile alıyorum. - hadley


Şahsen, ben bir "astar" tercih ederim. Çizgiler boyunca bir şey:

my.df <- data.frame(col1 = sample(c(1,2), 10, replace = TRUE),
        col2 = as.factor(sample(10)), col3 = letters[1:10],
        col4 = sample(c(TRUE, FALSE), 10, replace = TRUE))
my.list <- list(list1 = my.df, list2 = my.df[3], list3 = letters)

Veri yapısı, yazarın problemi fikrini taklit etmeli ve gerçek anlamdaki yapıyı taklit etmemelidir. Değişkenlerimin kendi değişkenlerimin ya da tanrının koruyuculuğunun üzerine yazmamasını sağladığım için minnettarım. df).

Alternatif olarak, birkaç köşeyi kesip önceden var olan bir veri kümesine işaret edebiliriz.

library(vegan)
data(varespec)
ord <- metaMDS(varespec)

Kullanabileceginiz özel paketlerden bahsetmeyi unutma.

Daha büyük nesnelerde bir şey göstermeye çalışıyorsanız, deneyebilirsiniz

my.df2 <- data.frame(a = sample(10e6), b = sample(letters, 10e6, replace = TRUE))

Uzamsal verilerle çalışıyorsanız raster Paket, bazı rastgele veri üretebilir. Paket vignette birçok örnek bulunabilir, ancak burada küçük bir nugget.

library(raster)
r1 <- r2 <- r3 <- raster(nrow=10, ncol=10)
values(r1) <- runif(ncell(r1))
values(r2) <- runif(ncell(r2))
values(r3) <- runif(ncell(r3))
s <- stack(r1, r2, r3)

Uygulandığı gibi bazı mekansal nesneye ihtiyacınız varsa spBazı veri kümelerini "mekansal" paketlerde harici dosyalar (ESRI şekil dosyası gibi) aracılığıyla alabilirsiniz (Görev Görünümlerinde Mekansal görünüme bakın).

library(rgdal)
ogrDrivers()
dsn <- system.file("vectors", package = "rgdal")[1]
ogrListLayers(dsn)
ogrInfo(dsn=dsn, layer="cities")
cities <- readOGR(dsn=dsn, layer="cities")

258



IMHO, kullanırken sample veya runif bu ihtiyatlı set.seed. En azından, bu örnekleme veya rasgele sayı üretimi üzerinde geçiş örnekleri oluştururken aldığım öneri. - Konrad
@Konrad Katılıyorum, ancak bu bağlı olabilir. Bazı rakamlar üretmeye çalışıyorsanız, bir tohum gerekli olmayabilir, ancak sabit sayıların gerekli olduğu belirli bir şeyi anlamaya çalışıyorsanız, bir tohum zorunlu olacaktır. - Roman Luštrik


Bu yazıdan esinlenerek, şimdi kullanışlı bir işlev kullanıyorum
reproduce(<mydata>) StackOverflow'a göndermek istediğimde.


HIZLI TALIMATLAR

Eğer myData Yeniden üretilecek nesnenin adıdır, R'de aşağıdakini çalıştırın:

install.packages("devtools")
library(devtools)
source_url("https://raw.github.com/rsaporta/pubR/gitbranch/reproduce.R")

reproduce(myData)

Detaylar:

Bu işlev, akıllı bir sarıcıdır. dput ve aşağıdakileri yapar:

  • otomatik olarak büyük bir veri seti (boyut ve sınıfa dayalı olarak örnekleme yapar. Örnek boyutu ayarlanabilir)
  • bir oluşturur dput çıktı
  • belirtmenize izin veriyor hangi dışa aktarılacak sütunlar
  • onun önüne ekler objName <- ... böylece kolayca kopyalanabilir veya yapıştırılabilir, ama ...
  • Bir mac üzerinde çalışıyorsanız, çıktı otomatik olarak panoya kopyalanır, böylece basitçe çalıştırabilir ve ardından sorunuza yapıştırabilirsiniz.

Kaynak burada mevcut:


Örnek:

# sample data
DF <- data.frame(id=rep(LETTERS, each=4)[1:100], replicate(100, sample(1001, 100)), Class=sample(c("Yes", "No"), 100, TRUE))

DF yaklaşık 100 x 102'dir. 10 satır ve birkaç özel sütun örneklemek istiyorum

reproduce(DF, cols=c("id", "X1", "X73", "Class"))  # I could also specify the column number. 

Aşağıdaki çıktıyı verir:

This is what the sample looks like: 

    id  X1 X73 Class
1    A 266 960   Yes
2    A 373 315    No            Notice the selection split 
3    A 573 208    No           (which can be turned off)
4    A 907 850   Yes
5    B 202  46   Yes         
6    B 895 969   Yes   <~~~ 70 % of selection is from the top rows
7    B 940 928    No
98   Y 371 171   Yes          
99   Y 733 364   Yes   <~~~ 30 % of selection is from the bottom rows.  
100  Y 546 641    No        


    ==X==============================================================X==
         Copy+Paste this part. (If on a Mac, it is already copied!)
    ==X==============================================================X==

 DF <- structure(list(id = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 25L, 25L, 25L), .Label = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y"), class = "factor"), X1 = c(266L, 373L, 573L, 907L, 202L, 895L, 940L, 371L, 733L, 546L), X73 = c(960L, 315L, 208L, 850L, 46L, 969L, 928L, 171L, 364L, 641L), Class = structure(c(2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L), .Label = c("No", "Yes"), class = "factor")), .Names = c("id", "X1", "X73", "Class"), class = "data.frame", row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 98L, 99L, 100L)) 

    ==X==============================================================X==

Ayrıca, çıktının bütününün güzel tek, uzun bir satırda, kesilmiş çizgilerden uzun bir paragrafta olmadığına dikkat edin. Bu, SO sorularının yazılarını okumayı kolaylaştırır ve ayrıca + yapıştırmayı da kolaylaştırır.


Ekim 2013'ü Güncelleyin:

Artık kaç metin satırı satırının alınacağını belirleyebilirsiniz (yani, StackOverflow'a ne yapıştırırsınız). Kullan lines.out=n Bunun için argüman. Örnek:

reproduce(DF, cols=c(1:3, 17, 23), lines.out=7) verim:

    ==X==============================================================X==
         Copy+Paste this part. (If on a Mac, it is already copied!)
    ==X==============================================================X==

 DF <- structure(list(id = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 25L,25L, 25L), .Label
      = c("A", "B", "C", "D", "E", "F", "G", "H","I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U","V", "W", "X", "Y"), class = "factor"),
      X1 = c(809L, 81L, 862L,747L, 224L, 721L, 310L, 53L, 853L, 642L),
      X2 = c(926L, 409L,825L, 702L, 803L, 63L, 319L, 941L, 598L, 830L),
      X16 = c(447L,164L, 8L, 775L, 471L, 196L, 30L, 420L, 47L, 327L),
      X22 = c(335L,164L, 503L, 407L, 662L, 139L, 111L, 721L, 340L, 178L)), .Names = c("id","X1",
      "X2", "X16", "X22"), class = "data.frame", row.names = c(1L,2L, 3L, 4L, 5L, 6L, 7L, 98L, 99L, 100L))

    ==X==============================================================X==

241





İşte iyi bir rehber:

http://www.r-bloggers.com/three-tips-for-posting-good-questions-to-r-help-and-stack-overflow/

Ama en önemlisi: Sadece sorunun ne olduğunu görmek için koşabileceğimiz küçük bir kod parçası yaptığınızdan emin ol. Bunun için yararlı bir işlev dput()Ancak, çok büyük verileriniz varsa, küçük bir örnek veri kümesi oluşturmak veya sadece ilk 10 satırı kullanmak isteyebilirsiniz.

DÜZENLE:

Ayrıca sorunun kendinizin nerede olduğunu belirlediğinizden emin olun. Örnek, "On line 200'de bir hata var" şeklinde bir R betiğinin tamamı olmamalıdır. R'de hata ayıklama araçlarını kullanırsanız (Ben seviyorum browser()) ve google, sorunun nerede olduğunu gerçekten belirleyebilmeli ve aynı şeyin yanlış gittiği önemsiz bir örneği yeniden üretebilmelisiniz.


168





R-help posta listesi bir gönderme rehberi Bu, veri üretme örneğini içeren sorular sormayı ve cevaplamayı kapsar:

Örnekler: Bazen yardımcı olur   birine küçük bir örnek vermek   aslında çalıştırabilir. Örneğin:

Aşağıdaki gibi bir matrisim x varsa:

  > x <- matrix(1:8, nrow=4, ncol=2,
                dimnames=list(c("A","B","C","D"), c("x","y"))
  > x
    x y
  A 1 5
  B 2 6
  C 3 7
  D 4 8
  >

bir veri çerçevesine nasıl dönüştürebilirim   8 satır ve adında üç sütun   'row', 'col' ve 'value',   boyut, 'row' ve 'col' değerleri olarak şöyle adlandırılır:

  > x.df
     row col value
  1    A   x      1

...
  (Cevabın hangisi olabileceği:

  > x.df <- reshape(data.frame(row=rownames(x), x), direction="long",
                    varying=list(colnames(x)), times=colnames(x),
                    v.names="value", timevar="col", idvar="row")

)

Kelime küçük özellikle önemlidir. Hedeflemelisiniz en az Tekrarlanabilir örnek, yani veri ve kodun sorunu açıklamak için olabildiğince basit olması gerektiği anlamına gelir.

DÜZENLEME: Güzel kod, çirkin koddan daha kolay okunur. Kullanın stil rehberi.


142





R.2.14'ten (sanırım) veri metninizi doğrudan okunabilirliğe yazabilirsiniz:

df <- read.table(header=T, text="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
") 

136



Ayrıca kullanabilirsiniz read.table("clipboard", header=TRUE). - sebastian-c
@ sebastian-c nasıl tekrarlanabilir örnek yapmak için bu kadar iyi? :) - TMS
@TMS Ciddi bir düşünce vererek, eğer asker veriyi sağladıysa ve problem küçükse (ama birkaç çözümü olabilir), o zaman daha hızlı olabilir ve yine de tüm adımları takip edebilirsiniz. - sebastian-c


Bazen sorun ne kadar zor olursa olsun, daha küçük bir veri parçası ile tekrarlanabilir değildir ve sentetik verilerle gerçekleşmez (her ne kadar sentetik veri setlerini nasıl ürettiğinizi göstermek yararlı olsa da) değil Sorunu yeniden üretin, çünkü bazı hipotezleri dışlar).

  • Verileri bir yere web'e göndermek ve bir URL vermek gerekli olabilir.
  • Eğer veriler halka açık bir şekilde serbest bırakılamazsa, ancak hiç paylaşılamıyorsa, o zaman ilgili taraflara e-posta göndermeniz mümkün olabilir (ancak bu iş için uğraşacak kişi sayısını azaltacaktır. üstünde).
  • Bunu gerçekten görmedim, çünkü verilerini serbest bırakamayan insanlar herhangi bir formu serbest bırakmak konusunda hassastır, ancak bazı durumlarda yeterince anonimleştirilmiş / şifrelenmiş / bozuk olsa bile bazı veriler hala veri yayınlayabilir. bir şekilde.

Bunlardan hiçbirini yapamazsanız, muhtemelen probleminizi çözmek için bir danışman işe almanız gerekir.

Düzenle: Anonimleştirme / şifreleme için iki yararlı SO soru:


126



Sentetik veri setleri üretmek için bu sorunun cevabı uygulamaları da dahil olmak üzere yararlı örnekler verin fitdistr ve fitdistrplus. - Iterator


Şimdiye kadar cevaplar yeniden üretilebilirlik kısmı için açık bir şekilde harika. Bu sadece tekrarlanabilir bir örneğin bir sorunun tek bileşeni olamayacağı ve olmamasının açıklığa kavuşturulmasıdır. Neye benzediğini ve probleminizin hatlarını açıklamayı, sadece oraya nasıl ulaşmaya çalıştığınızı açıklamayı unutma. Kod yeterli değildir; ayrıca kelimelere de ihtiyacınız var.

İşte, kaçınmak için neler yapılacağına dair tekrarlanabilir bir örnek (gerçek bir örnekten alınan, masumları korumak için değiştirilen isimler):


Aşağıdaki örnek veriler ve sorun yaşadığım işlevin bir parçasıdır.

code
code
code
code
code (40 or so lines of it)

Bunu nasıl başarabilirim ?



115





Hızlıca oluşturmak için dput Verilerinizin bir kopyasını (bir parça) panoya kopyalayabilir ve aşağıdakileri çalıştırabilirsiniz:

Excel'deki veriler için:

dput(read.table("clipboard",sep="\t",header=TRUE))

txt dosyasındaki veriler için:

dput(read.table("clipboard",sep="",header=TRUE))

Değiştirebilirsiniz sep İkincisinde gerekirse. Bu sadece verileriniz elbette panoda ise çalışır.


100