Как вы храните оцененные ggplots в R из списка списков по строке? - PullRequest
0 голосов
/ 02 июня 2018

Я сделал серию списков, которые содержат ggplots.Я хотел бы оценить объекты, чтобы укусить время заговора рано.Я собрал имена переменных, которые я хотел бы оценить в строковом векторе.Кроме того, я хочу сохранить имена переменных раньше.

Решение, которое я пробовал, было lapply eval(as.symbol("myvarstring")).Насколько мне известно, он оценивает переменную без сохранения вычисленного выражения.

Добавление as.symbol("myvarstring") <- eval(as.symbol("myvarstring")) не работает для меня.

Ниже приведен минимальный воспроизводимый пример моего неудачного решения.

library(tidyverse)

tbl <- tibble(
  x = 1:10,
  y = 1:10
)
g <- ggplot(tbl, aes(x, y)) + geom_point()

my_plot_list1 <- list(g,g,g,g,g,g)
my_plot_list2 <- list(g,g,g,g,g,g)
my_plot_list3 <- list(g,g,g,g,g,g)

my_vars <- c(
  "my_plot_list1",
  "my_plot_list2",
  "my_plot_list3"
)

lapply(my_vars, FUN = function(x) {as.symbol(x) <- eval(as.symbol(x))})

Как бы вы выполнили эту задачу?

Спасибо

РЕДАКТИРОВАТЬ: Эти графики в конечном итоге будут отображаться с помощью сценария rmarkdown.Графики будут load отредактированы в rscript.Мои графики занимают огромное количество времени для построения.Если бы я мог сохранить среду с «визуализированными» графиками, это сократило бы время выполнения rmarkdown.Сокращение времени выполнения rmarkdown является конечной целью.

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Почему бы вам просто не сохранить списки в списке, а не полагаться на хитрости, чтобы получить их из глобальной среды?

library(tidyverse)

tbl <- tibble(
  x = 1:10,
  y = 1:10
)
g <- ggplot(tbl, aes(x, y)) + geom_point()

my_plot_list1 <- list(g,g,g,g,g,g)
my_plot_list2 <- list(g,g,g,g,g,g)
my_plot_list3 <- list(g,g,g,g,g,g)

my_vars <- list(
  my_plot_list1,
  my_plot_list2,
  my_plot_list3
)

lapply(my_vars, function(x) lapply(x, function(y) y))

Если вы хотите убедиться, что графики печатаются (например,если вы вызываете этот код в функции или скрипте), то замените внутренний function(y) y на function(y) print(y)

РЕДАКТИРОВАТЬ: я считаю, что я неправильно понял.

Если вы хотите назначить переменные дляпрограммно сгенерированное имя, вы бы сделали:

x <- "mygeneratedname"
assign(x, g, envir = .GlobalEnv)
0 голосов
/ 02 июня 2018

Функция get в базе R извлекает объект из строки символов.Например:

get("tbl")
# # A tibble: 10 x 2
# x     y
# <int> <int>
# 1     1     1
# 2     2     2
# 3     3     3
# 4     4     4
# 5     5     5
# 6     6     6
# 7     7     7
# 8     8     8
# 9     9     9
# 10    10    10

Итак, в вашем примере:

 lapply(my_vars, FUN = function(x) { get(x)})

должно работать.

Я считаю, что есть лучшие подходы в зависимости от следующих шагов того, что вы хотитеделать с участками.Подумайте, если это лучший способ обработки данных.Может ли список списков работать?Хранить списки в векторе?

...