我有以下功能,我想用它来生成数据集中各种功能的密度直方图:
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')
}
我在这里可能缺少什么想法?
答案 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")