R将不需要的输出返回到屏幕或丢弃一些返回值

时间:2014-11-01 10:46:40

标签: r function return echo invisible

我有一个生成一些图的功能:

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)))

但是它不会产生前3个图:h2,s,s2(那些使用Lattice),只有d和b。

如何避免不需要的输出到屏幕并保留5个图? 提前致谢

1 个答案:

答案 0 :(得分: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))
}