2013-06-27 12 views
21

Bazı grafikler ggsave kullanarak kaydeder bir R betiği var. Komut satırını komut satırından çalıştırdığımda, yalnızca grafikleri değil, aynı zamanda boş bir Rplots.pdf dosyasını da kaydeder. R'nin bu gereksiz dosyayı oluşturmasını nasıl engelleyebilirim? Ben içinden kod kaynak yaparken, aynı zamandaNasıl ggsave ve Rscript kullanırken boş Rplots.pdf dosyası oluşturma R durdurmak

Rscript script.R 
Rscript --vanilla script.R 
chmod a+x script.R 
./script.R 

: komut gereksiz dosya oluşturmak çalışan

#!/usr/bin/env Rscript 

# Code that creates unnecessary Rplots.pdf file 
library(ggplot2) 
my.data <- data.frame(x = 1:10, y = 1:10) 
my.plot <- qplot(x, y, data = my.data) 
ggsave('example.png', my.plot) 

Tüm aşağıdaki yolları: Burada

hatayı yeniden üreten bir örnek script interaktif bir oturumda, gereksiz bir boş R Grafik Cihazı penceresi açılır. İşte
#!/usr/bin/env Rscript 

# Code that does NOT create unnecessary Rplots.pdf file 
library(ggplot2) 
my.data <- data.frame(x = 1:10, y = 1:10) 
my.plot <- qplot(x, y, data = my.data) 
png(file = 'example.png') 
print(my.plot) 
dev.off() 

(etkileşimli Rscript veya koşu olsun aynıdır) benim Oturum bilgileri: Ben ggsave yerine aşağıdaki daha ayrıntılı kod kullanıyorsanız

Dahası, ben bu sorunları yok:

R version 3.0.1 (2013-05-16) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    
[3] 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 
[7] LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

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

other attached packages: 
[1] ggplot2_0.9.3.1 

loaded via a namespace (and not attached): 
[1] colorspace_1.2-2 dichromat_2.0-0 digest_0.6.3  grid_3.0.1   
[5] gtable_0.1.2  labeling_0.1  MASS_7.3-26  munsell_0.4  
[9] plyr_1.8   proto_0.3-10  RColorBrewer_1.0-5 reshape2_1.2.2  
[13] scales_0.2.3  stringr_0.6.2 
+0

Ben senin sorunu çözmek için görünür ggsave' 'bir yükseklik ve genişliğini belirtmek, ama ben neden çünkü sanırım olsaydı ben hemen ... bilmediklerini itiraf ederse Varsayılanlar, ölçülmeden önce var olması gereken "geçerli çizim penceresinin" boyutlarıdır. – joran

+0

"ggsave" yi çalıştırdım ve "RPlots" yaratmadı.pdf', sadece 'example.pdf'. 'ggsave'' debug' modunda nispeten basittir, bunu deneyebilir ve '' device''ın hangi işlevi çağırdığını görebilirdiniz. –

+0

Bu davranışı görüyorum ve yükseklik ve genişlik argümanlarını belirtmek, hem etkileşimli bir oturumda hem de RScript kullanarak bu sorunu çözüyor gibi görünüyor. – joran

cevap

19

Eğer ggsave genişlik ve yükseklik bağımsız değişkenler için varsayılan bakarsanız, onlar par("din")[1] ve par("din")[2] olduğunu göreceksiniz. Bunu konsolda çalıştırırsanız, zaten açık değilse, bir grafik penceresi açtığını görürsünüz.

Aygıtın genişliğini/yüksekliğini inç olarak almak için gerçek bir aygıta ihtiyacınız olduğu için, bu tür bir anlam ifade eder. Bir cihaz açık değilse, par("din") bir hata döndürmesi gerektiğini varsayalım, bu durumda Hadley kesinlikle ggsave farklı yazmış olurdu. ?par den Aslında

:

If the current device is the null device, par will open a new device before querying/setting parameters.

Dolayısıyla, açıklık gelen istenmeyen cihazı önleyecek bir genişlik/yükseklik belirten.

+0

Teşekkürler, @joran! 'Par ('din')' çağrılarını önlemek için yüksekliği ve genişliği belirtmek sorunu çözer. –

+0

Bu benim için çalışmadı (R 3.0.2; ggplot 0.9.3.1); Ben hala 'filename' ile belirtilen png (veya pdf) dosyasına ek olarak' Rplots.pdf 'dosyasını alıyorum. Belki '' device' parametresi ile bir ilgisi var? – knowah

+0

@knowah Emin değil; Bu çözüm hala benim için çalışır R 3.1.0 ve ggplot2 1.0.0 (Ben sadece sorudan doğru kodu kullanarak tekrar test ettik.) – joran

-1

Bu sorunu da yaşadım ancak buradaki çözümler çözmedi. Çizimi oluşturmuştum ama bir değişkende olduğu gibi kaydetmedim. ggsave, çizilen son rakamı kaydedecek, böylece ihtiyacım olduğunu düşünmedim. Eğer bir değişkene arsa kaydetmek ve sonra bile açıkça arsa belirtmeden (ggsave yoksa, o Rplots.pdf dosyası oluşturmaz

örnek kod:.

kitaplığı (ggplot2) kitaplığı (uzak)

ff_lmer <- ggplot(ff, aes(x = thorax, y = longevity, color = activity)) + 
    geom_point() + 
    geom_smooth(method = lm, se = FALSE) 

ggsave("fig/ff_lmer.pdf", width = 5, height = 5) 

Oturum Bilgisi"

R versiyonu 3.3.2 (2016/10/31) Platformu: x86_64-elma-darwin13.4.0 (64-bit) altında çalıştırma: MacOS Sierra 10.12.2

ggplot2_2.2.1.9000