Drukuj do PDF w pętli for

Chcę zapętlić wykres i umieścić wynik wykresu w PDF.

W tym celu stosuje się następujący kod:

To, co robi, to pętla 3 razy i wykreślić 3 różne wykresy z zestawu danych iris. Następnie powinien zapisać go na dysku C:/. Pliki PDF są tworzone, ale są uszkodzone.

for(i in 1:3){
  pdf(paste("c:/", i, ".pdf", sep=""))
  plot(cbind(iris[1], iris[i]))
  dev.off()
}
Author: zx8754, 2011-05-04

2 answers

Aby narysować wykresy kratowe na urządzeniu, należy wydrukować obiekt wywołany wywołaniem do jednej z funkcji Grafiki kratowej. Normalnie, w interaktywnym użyciu, r automatycznie drukuje obiekty, jeśli nie są przypisane. W pętlach jednak automatyczne drukowanie nie działa, więc należy zorganizować Wydruk obiektu, Zwykle zawijając go w print().

Oto przykład (proszę wybaczyć moje nadużywanie notacji Formuły; -):

require(lattice)
for(i in 1:3) {
    pdf(paste("plot", i, ".pdf", sep = ""))
    print(xyplot(iris[,1] ~ iris[,i], data = iris))
    dev.off()
}

To tworzy trzy działki na urządzeniu pdf.

 45
Author: Gavin Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-04 11:07:20

Czy nazwa pliku zawierająca "c: /" jest prawidłową nazwą pliku na Twoim systemie operacyjnym? To wygląda jak część katalogu roboczego, którą chcesz ustawić przed wywołaniem pdf. Pojawia się błąd mówiący, że nie można otworzyć tego pliku:

Error in pdf(paste("c:/", i, ".pdf", sep = "")) : 
  cannot open file 'c:/1.pdf'

Jeśli upuszczę bit" c:/ " z nazwy pliku, trzy pliki PDF zostaną poprawnie wygenerowane. Ponadto, jeśli przeniesiesz dev.off() Poza pętlę for, otrzymasz pojedynczy plik PDF z trzema stronami zamiast trzech plików PDF. Może być tym, czego chcesz...

for(i in 1:3){
  pdf(paste("plot", i,".pdf",sep=""))
  plot(cbind(iris[1],iris[i]))
  dev.off()
}
 3
Author: Chase,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-04 10:55:45