Hi I am trying to create plots, using a for loop and assigning them in my global envirnoment, as follows:
library(ggplot2)
library(patchwork)
datasets::anscombe
#> x1 x2 x3 x4 y1 y2 y3 y4
#> 1 10 10 10 8 8.04 9.14 7.46 6.58
#> 2 8 8 8 8 6.95 8.14 6.77 5.76
#> 3 13 13 13 8 7.58 8.74 12.74 7.71
#> 4 9 9 9 8 8.81 8.77 7.11 8.84
#> 5 11 11 11 8 8.33 9.26 7.81 8.47
#> 6 14 14 14 8 9.96 8.10 8.84 7.04
#> 7 6 6 6 8 7.24 6.13 6.08 5.25
#> 8 4 4 4 19 4.26 3.10 5.39 12.50
#> 9 12 12 12 8 10.84 9.13 8.15 5.56
#> 10 7 7 7 8 4.82 7.26 6.42 7.91
#> 11 5 5 5 8 5.68 4.74 5.73 6.89
for(i in 1:4){
var = paste0('p', as.character(i))
assign(
x = var,
value = (ggplot(anscombe,
aes(x=get(paste0('x', as.character(i))),
y=get(paste0('y', as.character(i))))) + geom_point()),
envir=.GlobalEnv
)
}
(p1 + p2)/(p3 + p4)
As you can see, all the plots produced are same. But when I use the above same code without for loops, I get intended plots for example: p1 and p3 are shown below.
p1 = ggplot(anscombe, aes(x=get(paste0('x', as.character(1))),
y=get(paste0('y', as.character(1))))) + geom_point()
p3 = ggplot(anscombe, aes(x=get(paste0('x', as.character(3))),
y=get(paste0('y', as.character(3))))) + geom_point()
p1 + p3
Created on 2020-09-06 by the reprex package (v0.3.0)
My question is why isn't the for loop working? Why it's producing the p4 plot for all in the for
loop?