Решетка пакета R не будет отображаться при запуске с использованием source () - PullRequest
9 голосов
/ 22 июля 2011

Я начал использовать графический пакет lattice, но наткнулся на проблему.Я надеюсь, что кто-нибудь может мне помочь.Я хочу построить гистограмму, используя соответствующую функцию.

Вот файл 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()

Когда я запускаю этот код, используя R --vanilla < foo.r, он работает нормально.

Однако, если я использую второй файл bar.r с

source("bar")

и запускаю R --vanilla < bar.r, код выдаст ошибочный файл PDF.Теперь я узнал, что source("bar", echo=TRUE) решает проблему.Что здесь происходит?Это ошибка или я что-то упустил?

Я использую R версии 2.13.1 (2011-07-08) с lattice_0.19-30

Ответы [ 2 ]

21 голосов
/ 22 июля 2011

Это в FAQ для R - вам нужно print() вокруг функции решетки, которую вы вызываете:

7.22 Почему графика решетки / решетки не работает?

Наиболее вероятная причина в том, что вы забыли сказать R для отображения графика.Функции решетки, такие как xyplot (), создают объект графа, но не отображают его (то же самое верно для графики ggplot2 и графики Trellis в S-Plus).Метод print () для графического объекта производит фактическое отображение.Когда вы используете эти функции в интерактивном режиме в командной строке, результат автоматически печатается, но в source () или внутри ваших собственных функций вам понадобится явный оператор print ().

1 голос
/ 21 мая 2017

Пример дела

  1. visualise.r
    • звонки plot2this.r
      • вызывает ggplot2 и возвращает p объект

Здесь исправление в функции plot2this.r от return(p) до return(print(p)).

Начальный 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))

Вывод сейчас: ожидаемый вывод с желаемым участком

...