Использование ggplot () в другой функции в R - PullRequest
45 голосов
/ 24 февраля 2011

Я пытаюсь написать простую функцию заговора, используя библиотеку ggplot2.Но вызов ggplot не находит аргумент функции.

Рассмотрим data.frame с именем means, в котором хранятся два условия и два средних значения, которые я хочу построить (условие появится на оси X,означает на Y).

library(ggplot2)
m <- c(13.8, 14.8)
cond <- c(1, 2)
means <- data.frame(means=m, condition=cond)
means
# The output should be:
#     means    condition
#   1 13.8     1
#   2 14.8     2

testplot <- function(meansdf)
{
  p <- ggplot(meansdf, aes(fill=meansdf$condition, y=meansdf$means, x = meansdf$condition))
  p + geom_bar(position="dodge", stat="identity")
}

testplot(means)
# This will output the following error:
# Error in eval(expr, envir, enclos) : object 'meansdf' not found

Так что, похоже, ggplot вызывает eval, который не может найти аргумент meansdf.Кто-нибудь знает, как я могу успешно передать аргумент функции в ggplot?

(Примечание: да, я мог бы просто вызвать функцию ggplot напрямую, но в конце я надеюсь, что моя функция plot сделает более сложные вещи!:))

Ответы [ 11 ]

0 голосов
/ 23 октября 2015

Я просто генерирую новые переменные фрейма данных с нужными именами внутри функции:

testplot <- function(df, xVar, yVar, fillVar) {
    df$xVar = df[,which(names(df)==xVar)]
    df$yVar = df[,which(names(df)==yVar)]
    df$fillVar = df[,which(names(df)==fillVar)]
    p <- ggplot(df,
                aes(x=xvar, y=yvar, fill=fillvar)) +
             geom_bar(position="dodge", stat="identity")
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...