我无法弄清楚为什么以下功能不起作用。如有必要,我将为该示例创建数据。请告诉我。但这需要花费很多时间,因此,我想首先询问没有数据的情况,万一,问题很明显,你可以看到没有数据。
请参阅下面的代码。如果我使用函数
plotReturns(8, "1930-01-01", "1940-12-31", "savehere.pdf")
创建了文件savehere.pdf
,但我无法打开它。我收到错误说
打开此文档时出错。无法打开此文件,因为它没有页面。
但是,如果不使用该函数,我手动完成该函数代码中的每一步(用上面用作参数的值替换变量名),然后创建文件savehere.pdf
,我可以打开它。
所以,看来我的任何特定命令都没有错。但是,为什么函数在被称为函数时不起作用?
感谢您的帮助。
plotReturns = function(decileValue, startDate, endDate, fileName) {
# Keep data from specific decile
specificdecile <- merged.data[merged.data$decile_correct == decileValue,]
#filter the data to get rows within the specified dates
specificdecileAndYears <- specificdecile[
((specificdecile$rdate >= as.Date(startDate)) &
(specificdecile$rdate <= as.Date(endDate))),]
#keep the necessary columns:rdate, decile_correct, vwret_bottomup, vwret_CRSP
specificdecileAndYears <- specificdecileAndYears[c("rdate", "decile_correct",
"vwret_bottomup", "vwret_CRSP")]
# Melt the data for plotting
melted.data <- melt(specificdecileAndYears, id=c("rdate","decile_correct"))
# Use melted data for plotting
# Set the plot title
title <- paste("Plot for decile", decileValue)
# Specifing colors to be used for line plots
myColors <- c("steelblue", rgb(1,0.5,0.3,0.5))
fileName <- fileName
pdf(fileName, width=8, height=5)
# scale_color_manual is to use custom colors specified in myColors above.
# The first argument of scale_color_manual specifies the title of the legend,
# which is set to empty here.
ggplot(melted.data, aes(x=rdate, y=value, color=variable)) + geom_line() +
opts(legend.position=c(0.85,0.2), legend.background=theme_rect(col=0), title=title) +
scale_color_manual("", values=myColors) +
ylab("Return") + xlab("")
# turn device off
dev.off()
}
答案 0 :(得分:5)
这是在FAQ中。
http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f
当你在函数内部时,你需要print
格子和ggplot对象。它们都是“网格图形”的类型,它们通常在命令的各个部分中构建,而不是总是作为图形设备的副作用。该模型尤其适用于ggplot,其中通常使用“+”绘图运算符添加要素。但是,莱迪思图形函数也会返回列表,因此它们也可以附加到trellis.focus
和update.trellis