Оценка var внутри ggplot - PullRequest
       32

Оценка var внутри ggplot

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

Мне нужно отобразить данные с использованием другой консолидации, и я хотел бы сделать это внутри ggplot.

x <- c(1,2,1,2,1,2,1,2,1)
cust <- c("a", "b", "c", "a", "b", "c", "a", "b", "c")
prod <- c("p1", "p1", "p2", "p2", "p1", "p1", "p2", "p2", "p1")
qty <- c(11,12,13,14,15,16,17,18,19)

dt <- data.table(x, cust, prod, qty)
rm(cust, prod, qty, x)

Итак, если я выберу консолидацию по cust, я получу:

print.dt <- function(dt, x, qty, anchor_var_, geom) {
ggplot(dt, aes(x=x, y = qty, color = get(anchor_var_))) + 
    stat_summary(fun.y=sum, geom=geom, size=1.5 , aes(group=get(anchor_var_)))
}
anchor <- "cust"
print.dt(dt,x,qty,anchor, geom = "line")

enter image description here

В противном случае, если я решу объединиться на prod, то:

anchor <- "prod"
print.dt(dt,x,qty,anchor, geom = "line")

enter image description here

Однако этот код вызывает get() дважды.Есть ли другой способ конвертировать только один раз и подать заявку на два экземпляра?Я пытался:

print2.dt <- function(dt, x, qty, anchor_var_, geom) {
  anchor_var <- get(anchor_var_)
  ggplot(dt, aes(x=x, y = qty, color = anchor_var)) + 
    stat_summary(fun.y=sum, geom=geom, size=1.5 , aes(group=anchor_var))
}
anchor <- "prod"
print2.dt(dt,x,qty,anchor, geom = "line")

Но это не работает.

1 Ответ

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

Из пакета rlang вы можете использовать оператор !! на sym(variable).Это приводит к кавычкам и оценке аналогично тому, как вы достигли бы с eval(parse(text = "variable")).

print2.dt <- function(dt, x, qty, anchor_var_, geom) {
  ggplot(dt, aes(x=x, y = qty, color = !! sym(anchor_var_))) + 
    stat_summary(fun.y=sum, geom=geom, size=1.5 , aes(group=!! sym(anchor_var_))
}

print2.dt(dt,x,qty,anchor_var_ = "prod", geom = "line")
...