2

您好,我有一个使用 sendplot 包创建交互式绘图的功能,但出现了一个奇怪的错误,我在网上搜索了很多,但我什么也没找到!

我使用 R 2.15.1

问题是当我调用我的函数时,我得到了错误:

图像错误(x = xx,y = yy,z = zz,col = heat.colors(30),axes = FALSE):找不到对象“xx”

但是,如果我在控制台中逐行执行我的代码,它就可以工作(因为 xx,yy,zz,data.mat 在我的工作区中)我不明白为什么当我调用我的函数时对象不在我的工作区中.. .

这是我的代码:

   Heatmap<-function(data.mat,main.str="heatmap"){

         xx <- 0:dim(data.mat)[1] 
         yy <- 0:dim(data.mat)[2] 
         zz <- log(data.mat+1)
         plot.call = "image( x=xx,y=yy, z=zz,col = heat.colors(30),axes = FALSE);
         axis(1,0.5:(dim(data.mat)[1]-0.5),
         labels=rownames(data.mat),
         las = 2, line = -0.5, tick = 0,cex.axis =1);
         axis(4,0.5:(dim(data.mat)[2]-0.5),
         labels=colnames(data.mat),
         las = 2, line = -0.5, tick = 0,cex.axis =.8)"
         mai.mat = matrix(c(1.5,.5,.5,1.5), ncol=4)
         mai.prc = FALSE
         xy.labels=list(nb_of_sequences=t(data.mat))
         x.labels=data.frame(City=rownames(data.mat))
         y.labels=data.frame(Order=colnames(data.mat))

         imagesend(plot.call=plot.call,
            y.pos=yy,
            x.pos=xx,
            mai.mat=mai.mat, mai.prc=mai.prc,
            xy.type="image.box",
            x.labels=x.labels,
            y.labels=y.labels,
            xy.labels = xy.labels,
            image.size="500x800",
            fname.root="exPlotImage",
            font.size=18)

           return (0)

如果您对此有解决方案,请告诉我!谢谢

4

1 回答 1

0

我找到了一个临时解决方案:我只需将 xx,yy,zz 分配给全局环境并在最后删除它们就可以了

  Heatmap<-function(data.mat,main.str="heatmap"){

     xx <<- 0:dim(data.mat)[1] 
     yy <<- 0:dim(data.mat)[2] 
     zz <<- log(data.mat+1)
     plot.call = "image( x=xx,y=yy, z=zz,col = heat.colors(30),axes = FALSE);
     axis(1,0.5:(dim(data.mat)[1]-0.5),
     labels=rownames(data.mat),
     las = 2, line = -0.5, tick = 0,cex.axis =1);
     axis(4,0.5:(dim(data.mat)[2]-0.5),
     labels=colnames(data.mat),
     las = 2, line = -0.5, tick = 0,cex.axis =.8)"
     mai.mat = matrix(c(1.5,.5,.5,1.5), ncol=4)
     mai.prc = FALSE
     xy.labels=list(nb_of_sequences=t(data.mat))
     x.labels=data.frame(City=rownames(data.mat))
     y.labels=data.frame(Order=colnames(data.mat))

     imagesend(plot.call=plot.call,
        y.pos=yy,
        x.pos=xx,
        mai.mat=mai.mat, mai.prc=mai.prc,
        xy.type="image.box",
        x.labels=x.labels,
        y.labels=y.labels,
        xy.labels = xy.labels,
        image.size="500x800",
        fname.root="exPlotImage",
        font.size=18)

  rm(xx,envir = .GlobalEnv)
  rm(yy,envir = .GlobalEnv)
  rm(zz,envir = .GlobalEnv)
  return (0)
}

但我想这不是最好的解决方案......如果你有更好的解决方案,请告诉我

于 2012-11-13T20:59:03.547 回答