André, mão está otimizado mas já te dá um norte.

Estou assumindo que o resp do plot é o rep do objeto dados

b <- sort(unique(dados$B)) # ou levels(dados$B)
modelos.summary <- vector(mode = 'list', length = length(b))
for (i in 1:length(b)) {
  dados.modelo <- subset(x = dados, subset = B == b[i])
  modelos.summary[[i]] <- summary(lm(y ~ rep, data = dados.modelo))
  png(paste0("Gráfico ", b[i], ".png")) 
  plot(dados.modelo$y ~ dados.modelo$rep)
  dev.off()
}
names(modelos.summary) <- b