2011-12-30 1 views
1

Я не могу понять, почему следующая функция не работает. При необходимости я создам данные для примера. Пожалуйста, дайте мне знать. Но это займет много времени, и, следовательно, я хотел сначала спросить без данных, на случай, проблема очевидна, что вы можете видеть без данных.Можно ли определить команды сюжета как часть функции, а затем использовать настраиваемую функцию для построения?

См. Приведенный ниже код. Если я использую функцию

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() 
} 
+2

Это FAQ и ловит много-много людей. Вы должны явно указать _print_ графику ggplot или решетки из функции. т. е. 'p <- ggplot (...); печати (р) '. – joran

+0

Спасибо, Йоран. Цените свой ответ. – Curious2learn

ответ

5

Это в FAQ.

http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f

Вы должны print решетки и ggplot объектов, когда вы внутри функции. Они представляют собой оба типа «сетчатой ​​графики», которые обычно формируются в разделах команд, а не всегда работают как побочные эффекты на графических устройствах. Эта модель особенно уместна для ggplot, где типично добавлять функции с помощью оператора построения «+». Тем не менее, графическая функция Lattice также возвращает списки, поэтому они также могут быть добавлены с такими функциями, как trellis.focus и update.trellis

+0

Удивительный! Спасибо. Не могли бы вы ссылаться на часто задаваемые вопросы, которые вы указали в своем сообщении? – Curious2learn

+2

@ Curious2learn Это один из многих часто задаваемых вопросов, перечисленных на веб-сайте CRAN [здесь] (http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not- work_003f) – joran

+0

нам нужен этот пакет faq ... список пожеланий на 2012 год – baptiste

Смежные вопросы