函数中的ggplot无法找到传递给函数的数据帧

时间:2014-10-08 19:37:18

标签: r ggplot2

我有以下功能,我想用它来生成数据集中各种功能的密度直方图:

fraudSplitHist <- function(dataframe, stat_col, signal_col='fraud') {
  hist_data <- dataframe[,c(stat_col, signal_col)]
  colnames(hist_data) <- c('stat', 'fraud')

  hist_data$stat <- winsor1(hist_data$stat) # remove outliers

  ggplot(hist_data, aes(hist_data$stat, fill=as.factor(hist_data$fraud))) +
    geom_histogram(alpha=0.5, aes(y=..density..), position='identity', binwidth=1)
}

运行它总是给我这个错误

fraudSplitHist(dataframe=data, stat_col='some_column_of_values')
Error in eval(expr, envir, enclos) : object 'hist_data' not found

但是,它适用于qplot

fraudSplitHist <- function(dataframe, stat_col, fraud_col='fraud') {
  hist_data <- dataframe[,c(stat_col, fraud_col)]
  colnames(hist_data) <- c('stat', 'fraud')

  hist_data$stat <- winsor1(hist_data$stat)

  qplot(data=hist_data, x=stat, geom="histogram", fill=as.factor(fraud), binwidth=10,
        position='identity')
}

我在这里可能缺少什么想法?

1 个答案:

答案 0 :(得分:3)

您不应在aes()设置中指定data.frame名称。您应该只使用data.frame中的列名。例如,这应该工作

simpletest <- function(dataframe, x_col, y_col='cyl') {
  plot_data <- dataframe[,c(x_col, y_col)]
  colnames(plot_data) <- c('stat', 'fraud')

   ggplot(plot_data, aes(stat, fill=as.factor(fraud))) +
    geom_histogram(alpha=0.5, aes(y=..density..), position='identity', binwidth=1)
}

simpletest(mtcars, "disp")