2016-04-04 19 views
1

Büyük veri dökümü için özür dilerim, ancak bunu denediğim verilerin alt kümelerinde yeniden oluşturamıyorum. Verilerin dput kopyasını yapıştırdı (165 değil, deli değil) this Gist.Grup tarafından garip bir hata çizimi

Ben göre sport tarafından DT verileri çizdirme çalışıyorum:

  1. renkleri değişen,
  2. Plot grafiği olarak kolon gini tüm verileri barındırmak için uygun sınırlarına boş arsa oluşturun sport
  3. Plot renk uyumu için bir hat olarak kolon five_year_ma ile bu 2.
içinde

Bu basit olmalı ve daha önce böyle şeyler yaptım.

#empty plot with proper axes 
DT[ , plot(
    NA, ylim = range(gini), xlim = range(season), 
    xlab = "Season", ylab = "Gini", 
    main = "Comparison of Gini Coefficient Across Sports")] 

#pick colors for each sport 
cols <- c(NHL="black", NBA="red") 

DT[ , { 
    #add points to current plot 
    points(season, gini, col = cols[.BY$sport]) 

    #add lines to current plot 
    lines(season, five_yr_ma, col = cols[.BY$sport], lwd = 3)}, 
    by = sport] 

Ama bu bana çıktı/hata veriyor: İşte çalışması gerekir ne

# Empty data.table (0 rows) of 1 col: sport 

Error: x and y lengths differ in plot.xy()

Garip. Biz gruplama atlayıp sadece elle yaparsanız, mükemmel çalışıyor: plot.xy farklı uzunluktaki argümanlar aldı neden

all_sports[sport == "NBA", { 
    points(season, gini, col = "red") 
    lines(season, five_yr_ma, col = "red", lwd = 3)}] 

all_sports[sport == "NHL", { 
    points(season, gini, col = "black") 
    lines(season, five_yr_ma, col = "black", lwd = 3)}] 

expected

Ayrıca, hatta gruplaşma bağlamında, bu belirsiz - eğer biz gönderilmeden hemen önce girişlerini kaydetmek için Ar zorlamak için aşağıdaki ayar yapmak, herhangi bir sorun olduğu görünmüyor:

012:

all_sports[ , { 
    cat("\n\nPlotting for sport: ", .BY$sport) 
    points(x1 <- season, y1 <- gini, col = cols[.BY$sport]) 
    lines(x2 <- season, y2 <- five_yr_ma, col = cols[.BY$sport], lwd = 3) 
    cat("\npoints/season: ",length(x1), 
     "\npoints/gini: ", length(y1), 
     "\nlines/season: ", length(x2), 
     "\nlines/five_yr_ma: ", length(y2))}, 
    by = sport] 

çıkışını Has

# Plotting for sport: NHL 
# points/season: 98 
# points/gini: 98 
# lines/season: 98 
# lines/five_yr_ma: 98 

# Plotting for sport: NBA 
# points/season: 67 
# points/gini: 67 
# lines/season: 67 
# lines/five_yr_ma: 67 

Neler [email protected] işaret ettiği gibi, (henüz çözülmemiş gibi) bunun bir cilt soyma gibi görünüyor, Nitekim

R version 3.2.4 (2016-03-10) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Ubuntu 14.04.3 LTS 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] data.table_1.9.7 

loaded via a namespace (and not attached): 
[1] rsconnect_0.4.1.11 tools_3.2.4 
+0

Kodunuzu aynı boş data.table çıktısıyla çalıştırdım, ancak hata yok. (Oh, ve grafik iyi çalıştı.) – Frank

+0

@Frank garip (ama cesaret verici) ... bana bir şeyler başlatalım ... – MichaelChirico

+0

benim için çalışıyor - yeni bir oturumda tekrar deneyin? – eddi

cevap

2

: Bu makineler arasında yaygın değildir gibi göründüğü bu yana


, işte sessionInfo() var Bu, söz konusu hataya neden oldu sorunu: @Arun orada keşfetti gibi

Values of the wrong group are used when using plot() within a data.table() in RStudio

, bu RStudio gerçek grafikleriyle d gibi görünüyor

points(copy(season), copy(gini), 
     col = cols[.BY$sport]) 
lines(copy(season), copy(five_yr_ma), 
     col = cols[.BY$sport], lwd = 3) 

Veya: by gibi, her zaman .SD tüm ing basitçe copy ait geçici çözüm kendisi verir ki, mevcut olduğunda j değerlendirirken ihaz nasılsa yaratılan farklı alt grupları için kullanılan değiştirerek işaretçiler tarafından takıldı oluyor benim için çalıştı Her ikisi de

x <- copy(.SD) 
with(x, {points(season, gini, cols = cols[.BY$sport]); 
     lines(copy(season), copy(five_yr_ma), 
      col = cols[.BY$sport], lwd = 3)}) 

(alt grup çok küçük olduğundan, burada oynayan hiçbir hesaplama verimliliği endişe var - mümkün copy uzakta farkedilir performansını etkilemeden).

Bu, data.table GitHub sayfasındaki #1524 sayfasındadır ve RSTudio Desteği'nde this hata raporunu okudum; Bir düzeltme itilirse bunu günceller.