R初学者在这里。我试图自己编写一个函数,它有一个数据框作为参数,然后重新排序数据框,然后使用ggplot。我一直在努力尝试让功能发挥作用,不知怎的,我似乎无法找到我正在寻找的答案。
我的第一个代码就是这个,
pareto_plot <- function(pareto_data, title, x_label, y_label, filename){
pareto_calc = pareto_data[order(-pareto_data[2]),]
colnames(pareto_calc) = c("sku", "volume")
pareto_calc$sku_perc = 1/length(pareto_calc$sku)
pareto_calc$sku_cum = cumsum(pareto_calc$sku_perc)
pareto_calc$vol_perc = pareto_calc$volume/sum(pareto_calc$volume)
pareto_calc$vol_cum = cumsum(pareto_calc$vol_perc)
ggplot(pareto_calc, aes(x=pareto_data$sku_cum, y=pareto_data$vol_cum)) + geom_line(col="blue") +
geom_line(y=0.8, col="red") +geom_line(x=0.2, col="red") +
ggtitle(title) + ylab(y_label) + xlab(x_label)
ggsave(paste(filename,".png", sep=""))
}
当我使用上面的代码时,我收到了一个错误,
Error in eval(expr, envir, enclos) : object 'pareto_calc' not found
然后我更改了代码以使用data
,因为我看到很多在线示例都使用它作为参数。我现在修改了代码,
pareto_plot <- function(data, title, x_label, y_label, filename){
pareto_data = data
pareto_data[order(-pareto_data[2]),]
colnames(pareto_data) = c("sku", "volume")
pareto_data$sku_perc = 1/length(pareto_data$sku)
pareto_data$sku_cum = cumsum(pareto_data$sku_perc)
pareto_data$vol_perc = pareto_data$volume/sum(pareto_data$volume)
pareto_data$vol_cum = cumsum(pareto_data$vol_perc)
ggplot(pareto_data, aes(x=pareto_data$sku_cum, y=pareto_data$vol_cum)) + geom_line(col="blue") +
geom_line(y=0.8, col="red") +geom_line(x=0.2, col="red") +
ggtitle(title) + ylab(y_label) + xlab(x_label)
ggsave(paste(filename,".png", sep=""))
}
使用此代码,我现在收到错误
Error in exists(name, envir = env, mode = mode) :
argument "env" is missing, with no default
任何帮助将不胜感激。提前致谢! :)
答案 0 :(得分:1)
当你创建一个函数时,通常最容易编写代码,而不是使它成为函数,直到你确定它是有效的。然后将其包装为函数。
set.seed(33)
df <- data.frame(V1 = runif(10),
V2 = rnorm(10))
pareto_plot <- function(data, title, x_label, y_label, filename){
pareto_data <- data[order(-data[2]),] #you forgot to assign it
names(pareto_data) <- c("sku", "volume")
pareto_data$sku_perc <- 1/length(pareto_data$sku)
pareto_data$sku_cum <- cumsum(pareto_data$sku_perc)
pareto_data$vol_perc <- pareto_data$volume/sum(pareto_data$volume)
pareto_data$vol_cum <- cumsum(pareto_data$vol_perc)
ggplot(pareto_data, aes(x=sku_cum, y=vol_cum)) + geom_line(color="blue") +
geom_line(y=0.8, col="red") +geom_line(x=0.2, col="red") +
ggtitle(title) + ylab(y_label) + xlab(x_label)
ggsave(paste(filename,".png", sep=""))
}