2

こんにちは、sendplot パッケージを使用してインタラクティブなプロットを作成する関数があり、奇妙なエラーが発生しました。Web でよく検索しましたが、何も見つかりませんでした!!

R 2.15.1 を使用します

問題は、関数を呼び出すとエラーが発生することです。

画像のエラー (x = xx、y = yy、z = zz、col = heat.colors(30)、軸 = FALSE): オブジェクト 'xx' が見つかりません

しかし、コンソールでコードを1行ずつ実行すると機能します(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 に答える