2011-07-21 14 views
6

Zacząłem używać pakietu graficznego lattice, ale natknąłem się na problem. Mam nadzieję, że ktoś może mi pomóc. Chcę wykreślić histogram za pomocą odpowiedniej funkcji.Krata pakietu R nie będzie działała, jeśli uruchomiona przy użyciu źródła()

Oto plik foo.r:

library("lattice") 

data <- data.frame(c(1:2),c(2:3)) 
colnames(data) <- c("RT", "Type") 

pdf("/tmp/baz.pdf") 
histogram(~ RT | factor(Type), data = data) 
dev.off() 

Kiedy uruchomić ten kod przy użyciu R --vanilla < foo.r działa wszystko w porządku.

Jednakże, jeśli używam drugi plik bar.r z

source("bar") 

i uruchomić R --vanilla < bar.r kod powoduje błędną plik pdf. Teraz dowiedziałem się, że source("bar", echo=TRUE) rozwiązuje problem. Co tu się dzieje? Czy to błąd, czy też coś mi brakuje?

Używam R w wersji 2.13.1 (2011-07-08) z lattice_0.19-30

Odpowiedz

15

Jest w FAQ for R - trzeba print() wokół funkcji siatkowej zadzwonić:

7.22 Dlaczego grafika kratowa/krata nie działa?

Najbardziej prawdopodobnym powodem jest to, że zapomniałeś powiedzieć R, aby wyświetlić wykres . Funkcje kratowe, takie jak xyplot(), tworzą obiekt graficzny, ale nie wyświetlają go (to samo dotyczy grafik ggplot2 i grafiki Trellis w S-Plus). Metoda print() dla obiektu wykresu generuje rzeczywisty ekran . Podczas interaktywnego korzystania z tych funkcji przy linii poleceń wynik jest automatycznie drukowany, ale w źródle() lub w ramach własnych funkcji potrzebna jest wyraźna instrukcja print().

+1

Wow, to było szybkie!Wiele czasu zajęło mi odkrycie, jaki jest faktyczny problem. Wielkie dzięki! To działa: '... print (histogram (~ RT | współczynnik (typ), dane = dane)) ...' – woobert

+0

Powinno to mieć zastosowanie do funkcji 'plot()' z pakietu 'graphics' ? Widzę podobne zachowanie, ale to chyba nie naprawi .. – naught101

+1

Ahh. 'działka 'działa * bez * polecenia print, ale przed wykreślaniem musisz użyć dev.new() lub podobnego. – naught101

0

Przykład przypadku

  1. visualise.r
    • połączenia plot2this.r
      • połączenia ggplot2 i zwraca p obiektów

Tutaj poprawka w funkcji plot2this.r z return(p) do return(print(p)).

Początkowa plot2this.r

p <- ggplot(dat.m, aes(x = Vars, y = value, fill=variable)) 
return(p) 

Fix

p <- ggplot(dat.m, aes(x = Vars, y = value, fill=variable)) 
return(print(p)) 

Wyjście teraz: oczekiwany wynik z poszukiwanych działki.