The answer from IrishStat shows all the points in the outcomes from the tests. But to my young eye (still an apprentice in time series), these tables with results from tests are not so easy to interpret.
So I made simply a plot of the monthly difference
# plot
plot(diff(economics$pop), type = "l",
xaxt="n", yaxt = "n", xlab = "", ylim = c(100,350),
main = "monthly population growth/change", ylab = "net change/month \n per thousand", lwd = 2)
points(diff(economics$pop), pch = 21, col = 1, bg = 1 ,cex = 0.4)
# custom axes
axis(2, at = seq(0,350,50),las = 2)
axis(1, at = c(0:(2015-1968))*12+7,
labels = rep("",length(c(0:(2015-1968)))), las = 1)
axis(1, at = c(1:(length(economics$pop)-1)), tck = -0.02,
labels = rep("",length(economics$pop)-1), las = 2)
axis(1, at = c(-1:(2015-1968))*12+7+6, tck = 0,
labels = c(1967:2015), las = 1,cex.axis=0.8, line = -0.5, lwd=0,las =2)
# lines for the yearly periods and the changes every 10 years
# (when the estimation method changes base on a new census)
for (i in 0:4) {
lines(rep(i*120+9,2)+12*2,c(-100,+500),lty=2)
}
for (i in 0:(2015-1968)) {
lines(rep(i*12+7,2),c(-100,+500),lty=2, col = 8)
}
The plot of the monthly growth clearly shows the periodicity every 12 months and every 10 years. We can also have a reasonable guess why these periods occur. The data are estimates and not raw observations. Every 10 years the estimation method is adjusted based on a new census, and this causes those jumps every 10 years. The 12 monthly pattern is likely due to the death rate which is higher in the winter (which makes the net growth smaller).

When I took a look into the description of the isSeasonal function it seems to me like it is basically fitting an ARIMA model with a low order (to subtract the linear trend) and then looking at the autocorrelation function of the residuals to see if there is a seasonal component.
### ARIMA model (with an order smaller than the freqeuncy to be tested)
mod <- forecast::auto.arima(economics$pop,max.order = 3)
#plotting ARIMA model with data
layout(c(1:2), heights = c(2,1))
window <- c(1,7)
plot(economics$pop, xlim = window*12,ylim = range(economics$pop[window*12]*c(0.99,1.01)),
xaxt = "n", ylab = "population \n per thousand", main = "observation/estimates + ARIMA fit")
axis(1, at = c(0:(2015-1968))*12+7,
labels = rep("",length(c(0:(2015-1968)))), las = 1)
axis(1, at = c(1:(length(economics$pop)-1)), tck = -0.01,
labels = rep("",length(economics$pop)-1), las = 2)
axis(1, at = c(-1:(2015-1968))*12+7+6, tck = 0,
labels = c(1967:2015), las = 1,cex.axis=1, line = -0.5, lwd=0,las =1)
lines(mod$fitted)
#plotting residuals
plot(mod$residuals, xlim = window*12,ylim = c(-50,50),
xaxt = "n", ylab = "difference \n per thousand", main = "residuals observation-fit")
axis(1, at = c(0:(2015-1968))*12+7,
labels = rep("",length(c(0:(2015-1968)))), las = 1)
axis(1, at = c(1:(length(economics$pop)-1)), tck = -0.01,
labels = rep("",length(economics$pop)-1), las = 2)
axis(1, at = c(-1:(2015-1968))*12+7+6, tck = 0,
labels = c(1967:2015), las = 1,cex.axis=1, line = -0.5, lwd=0,las =1)
for (i in 0:(2015-1968)) {
lines(rep(i*12+7,2),c(-100,+500),lty=2, col = 8)
}
The difference between the ARIMA fit and the time series is very difficult to observe with the naked eye, but a plot of the residuals shows it well.

The autocorrelation function of the residuals acf(mod$residuals) shows the seasonality in the residuals, indicating that there is a yearly pattern. This is obviously an anomaly to the naked eye. The isSeasonal function looks at it by performing all kinds of test to find out whether the anomaly is significant or not.
