Search code examples
rgammgcv

Prevent plot.gam from producing a figure


Say, I have a GAM that looks like this:

# Load library
library(mgcv)

# Load data
data(mtcars)

# Model for mpg
mpg.gam <- gam(mpg ~ s(hp) + s(wt), data = mtcars)

Now, I'd like to plot the GAM using ggplot2. So, I use plot.gam to produce all the information I need, like this:

foo <- plot(mpg.gam)

This also generates an unwanted figure. (Yes, I realise that I'm complaining that a plotting function plots something...) When using visreg in the same way, I'd simply specify plot = FALSE to suppress the figure, but plot.gam doesn't seem to have this option. My first thought was perhaps invisible would do the job (e.g., invisible(foo <- plot(mpg.gam))), but that didn't seem to work. Is there an easy way of doing this without outputting the unwanted figure to file?


Solution

  • Okay, so I finally figured it out 5 minutes after posting this. There is an option to select which term to plot (e.g., select = 1 is the first term, select = 2 is the second), although the default behaviour is to plot all terms. If, however, I use select = 0 it doesn't plot anything and doesn't give an error, yet returns exactly the same information. Check it out:

    # Load library
    library(mgcv)
    
    # Load data
    data(mtcars)
    
    # Model for mpg
    mpg.gam <- gam(mpg ~ s(hp) + s(wt), data = mtcars)
    
    # Produces figures for all terms
    foo1 <- plot(mpg.gam)
    
    # Doesn't produce figures
    foo2 <- plot(mpg.gam, select = 0)
    
    # Compare objects
    identical(foo1, foo2)
    
    [1] TRUE
    

    Bonza!