ggvis внутри функции

Я пытаюсь создать простую функцию, которая позволяет рисовать ggvis график. Я знаю, что здесь я должен использовать нестандартную оценку, поэтому я использую функцию intercept пакета lazyeval:

test_fn <- function(data,xvar, yvar){

        plot <- 
                data %>% 
                ggvis(lazyeval::interp(~x, x = as.name(xvar)), 
                      lazyeval::interp(~y, y = as.name(yvar))) %>% 
                layer_points()
        return(plot)
}

ИЗМЕНИТЬ:

Эта функция работает нормально:

test_fn(mtcars,'mpg', 'qsec')

Но что я должен сделать дополнительно, чтобы данная команда работала:

test_fn(mtcars,mpg, qsec)

person Nicolabo    schedule 04.01.2016    source источник
comment
Можете уточнить, что именно не работает? Используя вашу функцию, test_fn(mtcars, "mpg", "wt") строит график. Попробуйте включить в свой вопрос воспроизводимый пример.   -  person aosmith    schedule 04.01.2016
comment
Также обратите внимание, что вы можете использовать функцию prop из ggvis для такого рода задач вместо lazyeval::interp. Это будет выглядеть, например, как ggvis(prop("x", as.name(xvar)), prop("y", as.name(yvar))), но дополнительные примеры см. на странице справки.   -  person aosmith    schedule 04.01.2016


Ответы (1)


Один из вариантов — использовать deparse(substitute(...)) для такой нестандартной оценки. Это делает функцию более длинной, но может быть удобной для пользователя.

Вот как это может выглядеть при использовании метода lazyeval::interp:

test_fn <- function(data, xvar, yvar){
    x <- deparse(substitute(xvar))
    y <- deparse(substitute(yvar))
    plot <- 
        data %>% 
        ggvis(lazyeval::interp(~x, x = as.name(x)), 
              lazyeval::interp(~y, y = as.name(y))) %>% 
        layer_points()
    return(plot)
}

А вот версия с prop:

test_fn <- function(data, xvar, yvar){
    x <- deparse(substitute(xvar))
    y <- deparse(substitute(yvar))
    plot <- 
        data %>% 
        ggvis(prop("x", as.name(x)), 
              prop("y", as.name(y))) %>% 
        layer_points()
    return(plot)
}

Оба работают с именами переменных без кавычек:

test_fn(mtcars, mpg, wt)

введите здесь описание изображения

person aosmith    schedule 04.01.2016