Я начал использовать Sweave некоторое время назад.Однако, как и большинство людей, довольно скоро я столкнулся с серьезной проблемой: скоростью.Для обработки большого документа требуется много времени, что делает эффективную работу довольно сложной.Обработка данных может быть значительно ускорена с помощью cacheSweave.Тем не менее, графики - особенно ggplot;) - по-прежнему отнимают слишком много времени.Вот так я хочу использовать pgfSweave.
Через много, много часов мне наконец удалось настроить работающую систему с Eclipse / StatET / Texlipse.Затем я захотел преобразовать существующий отчет для использования с pgfSweave и получил неприятный сюрприз: большинство моих ggplots, похоже, больше не работают.Следующий график, например, прекрасно работает в консоли и Sweave:
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Запустив его с помощью pgfSweave, я получаю эту ошибку:
Error in if (width > 0) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (width > 0) { :
the condition has length > 1 and only the first element will be used
Error in driver$runcode(drobj, chunk, chunkopts) :
Error in if (width > 0) { : missing value where TRUE/FALSE needed
Когда я удаляю aes (...) из geom_point, график отлично работает с pgfSweave.
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
Редактировать: Я исследовал эту проблему подробнее и мог бы свести проблему к tikz-устройству.
Это работает просто отлично:
quartz()
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
Это дает вышеуказанную ошибку:
tikz( 'myPlot.tex',standAlone = T )
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
dev.off()
Это также прекрасно работает:
tikz( 'myPlot.tex',standAlone = T )
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
dev.off()
Я мог бы повторить это с 5 различными ggplots.Когда в отображении не используется цвет (или размер, альфа, ...), он работает с tikz.
Q1: У кого-нибудь есть объяснения этому поведению?
Кроме того, кэширование фрагментов кода, не относящихся к сюжету, работает не очень хорошо.Следующий фрагмент кода не требует времени со Sweave.С pgfSweave это занимает примерно 10 секунд.
<<plot.opts,echo=FALSE,results=hide,cache=TRUE>>=
#colour and plot options are globally set
pal1 <- brewer.pal(8,"Set1")
pal_seq <- brewer.pal(8,"YlOrRd")
pal_seq <- c("steelblue1","tomato2")
opt1 <- opts(panel.grid.major = theme_line(colour = "white"),panel.grid.minor = theme_line(colour = "white"))
sca_fill_cont_opt <- scale_fill_continuous(low="steelblue1", high="tomato2")
ory <- geom_hline(yintercept=0,alpha=0.4,linetype=2)
orx <- geom_vline(xintercept=0,alpha=0.4,linetype=2)
ts1 <- 2.3
ts2 <- 2.5
ts3 <- 2.8
ps1 <- 6
offset_x <- function(x,y) 0.15*x/pmax(abs(x),abs(y))
offset_y <- function(x,y) 0.05*y/pmax(abs(x),abs(y))
plot_size <- 50*50
Это также кажется довольно странным поведением, поскольку только некоторые переменные установлены для дальнейшего использования.
Q2: Кто-нибудь получил какие-либо объяснения длячто?
Q3: В целом, я хотел бы спросить, если кто-нибудь вообще успешно использует pgfSweave?Успешно я имею в виду, что все, что работает в Sweave, также работает в pgfSweave, с дополнительным преимуществом хороших шрифтов и улучшенной скоростью.;)
Большое спасибо за ответы!