Выберите ggtheme случайно - PullRequest
       5

Выберите ggtheme случайно

0 голосов
/ 01 февраля 2019

Я хотел бы нарисовать ggplot со случайной темой (На самом деле, я хочу нарисовать много сюжетов, каждый из которых имеет свою тему).Рассмотрим следующий воспроизводимый пример:

# Exmple data
df <- data.frame(x = 1:10, y = 1:10)

# Select theme randomly
random_theme <<- sample(c("theme_gray", "theme_bw", "theme_light", "theme_dark", "theme_minimal", "theme_classic"), 1)

# Draw ggplot
ggplot(df, aes(x, y)) +
  geom_line() +
  random_theme            # This line does not work

Вопрос: Как я могу случайно выбрать программу?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Вы можете сделать это с match.fun():

random_theme = match.fun(sample(c("theme_gray", "theme_bw", "theme_light", "theme_dark", "theme_minimal", "theme_classic"), 1))

ggplot(df, aes(x, y)) +
 geom_line() +
 random_theme()
0 голосов
/ 01 февраля 2019

Пример из функций, а не из названий функций.Кроме того, sample возвращает список при выборке из чего-либо более сложного, чем скаляр, поэтому вам нужен первый элемент списка.Например:

> sample(c(sqrt, sqrt),2)
[[1]]
function (x)  .Primitive("sqrt")

[[2]]
function (x)  .Primitive("sqrt")

Получите случайную функцию темы с помощью:

random_theme <- sample(c(theme_gray, theme_bw, theme_light, theme_dark, theme_minimal, theme_classic), 1)[[1]]

и вызовите ее при построении графика:

ggplot(df, aes(x, y)) +geom_line() + random_theme()

Resample random_theme и plotеще раз, чтобы обновить.

Кроме того, вам, вероятно, не нужен <<-, который, как я полагаю, представляет собой похмелье от отчаянных попыток заставить что-то работать ...

0 голосов
/ 01 февраля 2019

Поскольку ваш random_theme является character вектором, вы можете использовать eval, а затем parse для анализа вашей темы.

library(tidyverse)

ggplot(df, aes(x, y)) +
  geom_line() +
  eval(parse(text = paste0(random_theme, "()")))

Или, более точно:

ggplot(df, aes(x, y)) +
  geom_line() +
  eval(parse(text = paste0(sample(c("theme_gray",
                                    "theme_bw", 
                                    "theme_light", 
                                    "theme_dark", 
                                    "theme_minimal", 
                                    "theme_classic"), 1)  , "()")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...