0

I'm observing a very strange behaviour with R.

The following code works when I type it in line-by-line into an instance of R run from my terminal. (OS is Debian Linux.)

However it does not work when I try and run source("script.R").

It also does not work from within R Studio.

Specifically, it fails to produce graphical output with autoplot. Writing to pdf file does not work, and if I remove the pdf() and dev.off() lines, no window containing the figure is opened.

Here's a copy of my script...

library(lubridate)
library(ggplot2)
library(matrixStats)
library(forecast)

df_input <- read.csv("postprocessed.csv")

x <- df_input$time
y <- df_input$value
df <- data.frame(x, y)

x <- df$x
y <- df$y

holtmodel <- holt(y)

pdf("autoplot.pdf")
autoplot(holtmodel)
dev.off()

And for convenience, here's a datafile.

"","time","value"
"1",1,2.61066016308988
"2",2,3.41246054742996
"3",3,3.8608767964033
"4",4,4.28686048552237
"5",5,4.4923132964825
"6",6,4.50557049744317
"7",7,4.50944447661246
"8",8,4.51097373134893
"9",9,4.48788748823809
"10",10,4.34603985656981
"11",11,4.28677073671406
"12",12,4.20065901625172
"13",13,4.02514194962519
"14",14,3.91360194972916
"15",15,3.85865748409081
"16",16,3.81318053258601
"17",17,3.70380706527433
"18",18,3.61552922363713
"19",19,3.61405310598722
"20",20,3.64591327503384
"21",21,3.70234435835577
"22",22,3.73503970503372
"23",23,3.81003078640584
"24",24,3.88201196162666
"25",25,3.89872518158949
"26",26,3.97432743542362
"27",27,4.2523675144599
"28",28,4.34654855854847
"29",29,4.49276038902684
"30",30,4.67830892029687
"31",31,4.91896819673664
"32",32,5.04350767355202
"33",33,5.09073406942046
"34",34,5.18510849382162
"35",35,5.18353176529036
"36",36,5.2210776270173
"37",37,5.22643491929207
"38",38,5.11137006553725
"39",39,5.01052467981257
"40",40,5.0361056705898
"41",41,5.18149486951409
"42",42,5.36334869132276
"43",43,5.43053620818444
"44",44,5.60001072279525

Pretty confused because it seems like a trivial script!

FreelanceConsultant
  • 13,167
  • 27
  • 115
  • 225

1 Answers1

2

change it to:

print(autoplot(holtmodel))

When you step through code, you get an implicit print(...) statement on each code line. When you source() you don't. ggplot (and others!) use print() to trigger their ploting (so that you can conveniently build up a plot step by step without having to wait for flickering figures)

Sirius
  • 5,224
  • 2
  • 14
  • 21
  • Ah right! Thanks for this. Is it just `ggplot` stuff which has to be wrapped with `print`? – FreelanceConsultant Mar 14 '21 at 16:18
  • Not only. Though it is the typical culprit with errors such as these. (no plot when sourcing / running elsewhere, but working plot when stepping throuh in console.) – Sirius Mar 14 '21 at 16:21