2013-07-17 9 views
5

Ben kullandığım bir arsa yaptığınızda R. ile benim veri analizini belgelemek için Github fiyat indirimlerini kullanın:R? De arsa kodu başına birden fazla dosya formatı nasıl üretebilirim?</p> <pre><code>jpeg("file_name.jpg") plot(...) dev.off() </code></pre> <p>sonra gömülü ve böyle markdown belgede görüntülenebilir bir jpeg arsa kaydetmek için:

!(file_name.jpg) 

Ancak, ben de nihai yayın için arsa bir pdf yapmak gerekir. Şu anda tüm arsa kodunu pdf("file_name.pdf") ile tekrar yazdım ama bu temelde çoğaltılmış kodla sonuçlanıyor.

Sırasıyla jpeg ve pdf çağrıları koyarak denedim ama daha sonra yalnızca alt olanı üretilmeye çalışıyorum.

jpeg ve pdf dosyasını aynı koddan kodun yalnızca bir kez çalıştırılması için bir yolu var mı?

+0

Eğer 'kullanmak ggplot', bir arsa kaydedip' print' kullanarak çağırabilirsiniz istekli iseniz. 'GG <- ggplot (...); Baskı (GG) fotoğraf benzeri görüntüler yoksa (her zaman olmasa da) daha iyi, daha ziyade istatistiksel grafik bitmap sürümleri için jpeg() '' den ')' png (kullanma yoluyla ' –

+2

, genellikle var ... –

+0

@BenBolker bahşiş için teşekkürler. Sadece Github'da görüntülemek için 'jpeg'leri kullanıyordum ama' png 'görüntüleri daha güzel görünüyor. – KennyPeanuts

cevap

5

... zaten ne yaptığını knitr çoğaltmak olabilir Yoksa kullanabilirsiniz dev.copy:

plot(cars) 
dev.copy(jpeg, "cars.jpeg") 
dev.off() 
dev.copy(pdf, "cars.pdf") 
dev.off() 
3

Neden knitr kullanılmamalıdır? örneğin:

```{r myplot,fig.width=7, fig.height=6,dev=c('png','pdf','jpeg')} 
plot(cars) 
``` 

Aynı arsa 3 versiyonları/dosyaları oluşturur:

  1. myplot.png
  2. myplot.jpeg
  3. myplot.pdf
3

@ agstudy'nin cevabı zekidir. kanonik cevap, bence, yinelenen kodu bir sürü varsa biraz yardımcı işlevi yapmak ve iki kez çalıştırmak olmasıdır:

tmpplotfun <- function() { ... lots of plot code ... } 
pdf(...) 
tmpplotfun() 
dev.off() 
jpeg(...) 
tmpplotfun() 
dev.off() 

yazarsın bu daha da hatta soyut:

plot_twice <- function(plotfun,...) { 
    pdf(...) 
    plotfun() 
    dev.off() 
    jpeg(...) 
    plotfun() 
    dev.off() 
} 
plot_twice(tmpplotfun) 

... biraz daha marifet ile size

İlgili konular