grid.arrange() directly draws on our device. 
However, arrangeGrob doesn't draw anything but returns a grob g, which can be passed to ggsave(file="something.pdf", g).
 # draw your plots
 p1 <- ggplot(...) # first plot
 p2 <- ggplot(...) # second plot
 p3 <- ggplot(...) # third plot
 #merge all plots within one grid 
 grid.arrange(p1, p2, p3, nrow=3) #arranges plots within grid
 #save
 g <- arrangeGrob(p1, p2, p3, nrow=3) #generates g
 ggsave(file="something.pdf", g) #saves g