NSE в рамках сюжетных цветовых факторов - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь разработать функцию, в которой есть несколько входных данных о том, какие факторы могут контролировать цвет диаграммы. Я пытаюсь использовать символьную строку для десегнации столбца data.frame для использования, но он не работает в параметре color = оператора plotly. Большое спасибо

Ошибка в! As.name (требуемый_фактор): неверный тип аргумента

require(dplyr)
require(plotly)


set.seed(42)


df <- data.frame(x = rep(LETTERS[1:5], 3), 
                 y = rexp(15, rate = 0.5),
                 z = c(rep("Adam", 5), rep("Arthur", 5), rep("Ford", 5)))
df <- arrange(df, desc(z))


df$z2 <- c(rep("a", 5), rep("b", 5), rep("c", 5))

desired_factor <- "z2"


plot_ly(df, 
        x = ~x, 
        y = ~y, 
        color = ~factor(!!as.name(desired_factor)), 
        colors = "Blues", 
        type = "bar") %>% 
  layout(barmode = "stack")

1 Ответ

1 голос
/ 05 мая 2020

Plotly не поддерживает квазиквотация . Вместо этого он использует формулы для указания имен столбцов. У вас есть несколько вариантов:

Вариант 1: динамическое построение формулы

fm <- as.formula( paste0("~factor(", desired_factor ,")") )

plot_ly(df, 
        x = ~x, 
        y = ~y, 
        color = fm,             # <-- NOTE: no ~
        colors = "Blues", 
        type = "bar") %>% 
  layout(barmode = "stack")

Вариант 2: построение и оценка графического выражения в полном объеме

ee <- rlang::expr(
  plot_ly(df, 
          x = ~x, 
          y = ~y, 
          color = ~factor(!!as.name(desired_factor)), 
          colors = "Blues", 
          type = "bar") %>% 
    layout(barmode = "stack"))

eval(ee)
...