On Mon, 23 Aug 2021 08:37:54 +0200 Dr Eberhard Lisse <nospam at lisse.NA> wrote:> create the variables dynamically and add them to to > the grid (dynamically, ie adding more countries)In my opinion, creating variables in the global environment programmatically may lead to code that is hard to understand and debug [*]. A key-value data structure (a named list or a separate environment) would avoid the potential problems from variable name collision. How about the following: 1. Put the countries in a vector: c('Namibia', 'Germany', ...) 2. Use lapply() to get a list of objects returned from your PICTURE function 3. To save the pictures into individual files, loop over the list. You can use setNames on the step 1 or 2 to make it a named list and keep the country names together with their pictures: for (n in names(pictures)) { dev.new() print(pictures[[n]]) ggsave(paste0(n, '.png'), ...) dev.off() } (You can also use the png() device and plot straight to the file, avoiding the need to draw the plot in the window for a fraction of a second and for ggsave().) 4. Use the grobs= argument of grid.arrange() to pass the list of objects to arrange instead of passing individual objects via ... -- Best regards, Ivan [*] For example, there's this FAQ for a different language: https://perldoc.perl.org/perlfaq7#How-can-I-use-a-variable-as-a-variable-name?
Thank you, more to study :-)-O el On 23/08/2021 10:20, Ivan Krylov wrote:> On Mon, 23 Aug 2021 08:37:54 +0200 > Dr Eberhard Lisse <nospam at lisse.NA> wrote: > >> create the variables dynamically and add them to to >> the grid (dynamically, ie adding more countries) > > In my opinion, creating variables in the global environment > programmatically may lead to code that is hard to understand and debug > [*]. A key-value data structure (a named list or a separate > environment) would avoid the potential problems from variable name > collision. How about the following: > > 1. Put the countries in a vector: c('Namibia', 'Germany', ...) > > 2. Use lapply() to get a list of objects returned from your PICTURE > function > > 3. To save the pictures into individual files, loop over the list. You > can use setNames on the step 1 or 2 to make it a named list and keep > the country names together with their pictures: > > for (n in names(pictures)) { > dev.new() > print(pictures[[n]]) > ggsave(paste0(n, '.png'), ...) > dev.off() > } > > (You can also use the png() device and plot straight to the file, > avoiding the need to draw the plot in the window for a fraction of a > second and for ggsave().) > > 4. Use the grobs= argument of grid.arrange() to pass the list of > objects to arrange instead of passing individual objects via ... >-- To email me replace 'nospam' with 'el'