views:

86

answers:

1

I'm using R to loop through the columns of a data frame and make a graph of the resulting analysis. I don't get any errors when the script runs, but it generates a pdf that cannot be opened.

If I run the content of the script, it works fine. I wondered if there is a problem with how quickly it is looping through, so I tried to force it to pause. This did not seem to make a difference. I'm interested in any suggestions that people have, and I'm also quite new to R so suggestions as to how I can improve the approach are welcome too. Thanks.

for (i in 2:22) {

  # Organise data
  pop_den_z = subset(pop_den, pop_den[i] != "0")  # Remove zeros
  y = pop_den_z[,i]        # Get y col
  x = pop_den_z[,1]        # get x col
  y = log(y)               # Log transform

  # Regression
  lm.0 = lm(formula = y ~ x)                # make linear model
  inter = summary(lm.0)$coefficients[1,1]   # Get intercept
  slop = summary(lm.0)$coefficients[2,1]    # Get slope

  # Write to File
  a = c(i, inter, slop)
  write(a, file = "C:/pop_den_coef.txt", ncolumns = 3, append = TRUE, sep = ",")

  ## Setup pdf
  string = paste("C:/LEED/results/Images/R_graphs/Pop_den", paste(i-2), "City.pdf")
  pdf(string, height = 6, width = 9)

  p <- qplot(
    x, y,
    xlab = "Radius [km]",
    ylab = "Population Density [log(people/km)]",
    xlim = x_range,
    main = "Analysis of Cities"
  )

  # geom_abline(intercept,slope)
  p + geom_abline(intercept = inter, slope = slop, colour = "red", size = 1)

  Sys.sleep(5)

  ### close the PDF file
  dev.off()
}
+6  A: 

The line should be

print(p + geom_abline(intercept = inter, slope = slop, colour = "red", size = 1))

In pdf devices, ggplot (and lattice) only writes to file when explicitly printed.

Eduardo Leoni
It's just lattice and ggplot2, and doesn't really have anything to do with grid.
hadley
thanks hadley. fixed it.
Eduardo Leoni
Thank you, that worked. I didn't realize it needs to be printed explicitly.
womble