2014-11-01 44 views
1

我有一個函數生成一些情節:[R不需要輸出返回到屏幕或滴一些返回值

estrat.precios <- function(numeric1,numeric2,factor1,numeric3,numeric4,numeric5,string){ 
    suppressPackageStartupMessages(library(lattice)) 

    # histograma de distribución por factor1 
    tit=paste("Distribución de descuentos por factor1,",string) 
    h2<-histogram(~ numeric2 | factor1,main=tit,xlab = "Descuento") 

    # scatterplot de Descuentos vs proyección de venta por grupo 
    tit<-paste("Desctos vs. Proyección de Venta por factor1,",string) 
    s<-xyplot(numeric2 ~ numeric3 | factor1, main = tit,scales=list(x=list(log=10,equispaced.log=T)),xlab = "Monto Techo",ylab = "Descuento") 

    # scatterplot de descuentos vs precio de referencia por grupo 
    tit<-paste("Desctos vs precio de referencia por grupo,",string) 
    s2<-xyplot(numeric2 ~ numeric4, group= factor1, main = tit, scales=list(x=list(log=10,equispaced.log=T)), auto.key = T, xlab="Precios de Referencia", ylab="Descuento") 

    # Density plot de variación respecto de promedio 
    tit<-paste("Densidad de variaciones vs promedio de precios,",string) 
    d<-plot(density((numeric1-numeric5)/numeric5,na.rm=T),main=tit,cex.main=0.9) 

    # boxplot variación respecto de promedio 
    bs<-as.character(summary(numeric1-numeric5)) 
    cs<-paste("Min=",bs[1],"1Q=",bs[2],"Mean=",bs[4],"3Q=",bs[5],"Max=",bs[6]) 
    tit<-paste("Distribución de variaciones vs promedio,",string) 
    b<-boxplot((numeric1-numeric5)/numeric5,main=tit,cex.main=0.9) 
    mtext(text=c,side=1) 


    return((list(h2,s,s2,d,b))) 
} 

當它運行時,它會產生大量不必要的輸出到屏幕(這是一個簡短摘錄):

[[4]] 
NULL 

[[5]] 
[[5]]$stats 
       [,1] 
[1,] -0.2194174757 
[2,] -0.0885108962 
[3,] 0.0000000000 
[4,] 0.0002734618 
[5,] 0.1333333333 

[[5]]$n 
[1] 911 

我已經嘗試過改變功能的最後一行:

return(invisible(list(h2,s,s2,d,b))) 

,但隨後沒有GE整理前3個地塊:h2,s,s2(使用格子),只有d和b。

如何避免不必要的輸出到屏幕並保留5個圖? 在此先感謝

+0

您可以通過提供您嘗試輸入到您的函數的值來重現這一點嗎?你還可以更詳細地描述你想要達到的目標嗎?你想要這些地塊嗎?你想對這些情節做什麼? – Thomas 2014-11-01 10:50:20

+0

托馬斯,謝謝你的回覆。你可以通過調用'estrat.precios(1:5,seq(0.01,0.05,0.01),c(「A」,「A」,「B」,「C」,「C」),21 :25,2:6,1.1:5.1,「string 09」)'。我想讓這些地塊分析定價策略(直觀地),然後決定是否要保存它們。 – PavoDive 2014-11-01 11:07:07

回答

0

您可以在生成最後兩個地塊之前顯示使用萊迪思的地塊,並返回invisible

estrat.precios <- function(numeric1,numeric2,factor1,numeric3,numeric4,numeric5,string) 
{ 
    suppressPackageStartupMessages(library(lattice)) 
    ... 
    s2<-xyplot(numeric2 ~ numeric4, group= factor1, main = tit, scales=list(x=list(log=10,equispaced.log=T)), auto.key = T, xlab="Precios de Referencia", ylab="Descuento") 
    # display plots here 
    plot(h2) 
    plot(s) 
    plot(s2) 
    # Density plot de variación respecto de promedio 
    tit<-paste("Densidad de variaciones vs promedio de precios,",string) 
    ... 
    invisible(list(h2,s,s2,d,b)) 
} 
+0

當我嘗試你的解決方案時,它有效地抑制了輸出到屏幕,但是在's2'的地方出現了一個空白的畫布(其他4個圖都可以)。當找到文件時會發出警告:'顯示列表重繪不完整'。我錯過了什麼嗎? – PavoDive 2014-11-01 13:00:09

+0

我看到了五塊地塊。在每個'plot'語句之後和'd <-plot(...)'之後執行'Sys.sleep(1)',以便它們顯示得很慢。 – javlacalle 2014-11-01 15:04:16

+0

這使它工作!謝謝! – PavoDive 2014-11-01 17:52:59