Использовать имена переменных dataframe в заголовках графиков - PullRequest
1 голос
/ 12 марта 2019

У меня есть фрейм данных с несколькими переменными, которые я хочу пометить, а затем использовать в нескольких ggplots.Я применил этикетки, используя пакет labeller со следующим кодом.

library(tidyverse)
library(labeller)
library(ggpubr)

example.df <- data.frame( 
origin = sample(c("hum_1", "mou_1"), 100, replace = TRUE),
v1 = rnorm(100, 100, 5), 
v2 = rnorm(100, 10,5), 
v3 = rnorm (100, 25, 5))

example.df <- example.df %>% set_variable_labels(origin = "original sample", v1 = "effect of Rx", v2 = "response", v3 = "weight (kg)")

Получает метки для отображения в кадре данных.Однако, когда я использую ggqqplot из ggpubr для построения этих переменных, я не вижу меток на результирующих графиках.

vars <- dput(colnames(select_if(example.df, is.numeric)))

lapply(vars, function(item) {
   ggqqplot(example.df, x=item, combine = FALSE, facet.by = "origin")+
   ggtitle(item)
   }
)

enter image description here enter image description here enter image description here

Я хотел бы получить оригинальный образец , Влияние rx и веса (кг) отображаются вместо v1, v2 и v3.Буду признателен за любую оказанную помощь.Благодарю.

1 Ответ

1 голос
/ 12 марта 2019

Вы можете присвоить имена vars, а затем использовать функции map2() или imap() из пакета purrr для их циклического переключения. Чтобы включить верхние индексы / подписки / математические обозначения, используйте expression() вместе с parse(text = ...) (см. Также пример1 , пример2 ).

names(vars) <- c(expression('effect of Rx'^{1}), 
                 "response", 
                 expression(weight/individual %.% kg[2])
                 )
vars
#>  "effect of Rx"^{\n    1\n}                    response 
#>                        "v1"                        "v2" 
#> weight/individual %.% kg[2] 
#>                        "v3"

### from purrr package
map2(vars, names(vars), ~ ggqqplot(example.df, x = .x, combine = FALSE, facet.by = "origin") +
       ggtitle(parse(text = .y)))

# or `imap(x, ...)` which is short hand for map2(x, names(x), ...) 
imap(vars, ~ ggqqplot(example.df, x = .x, combine = FALSE, facet.by = "origin") +
       ggtitle(parse(text = .y)))


#> $`"effect of Rx"^{\n    1\n}`

#> 
#> $response

#> 
#> $`weight/individual %.% kg[2]`

Создано в 2019-03-11 пакетом Представить (v0.2.1.9000)

...