2

格子パッケージを使用して、R でワイヤーフレームをプロットしたいと考えています。ただし、次のエラー メッセージが表示されます。「パケット 1 の負の長さベクトルを使用したエラーは許可されていません」。データは次のようになります。

> result_mean
  experiment alpha beta   packet
1          0   1.0    1 3.000000
2          0   1.1    1 2.571429

データを作成するコマンドは次のとおりです。

  png(file=paste("foobar.png"),width=1280, height=1280);
    plot <- wireframe(result_mean$packet ~ result_mean$alpha * result_mean$beta,       
      data=result_mean, scales = list(arrows=FALSE, cex= .45, col = "black", font = 3),
      drape = TRUE, colorkey = TRUE, main = "Foo",
      col.regions = terrain.colors(100),
      screen = list(z = -60, x = -60),
      xlab="alpha", ylab="beta", zlab="mean \npackets");
  print(plot);
  dev.off();

このエラー メッセージの意味と、これをデバッグする良い方法があるかどうか疑問に思っています。

前もって感謝します!

4

1 に答える 1

3

ラティス グラフィックスのデバッグは、(a) コードが複雑で多層的であり、(b) エラーがトラップされて傍受が困難になるため、少し困難です。ただし、少なくとも問題を診断する方法を得ることができます。

最初に最小限の例を作成します。あなたの問題は、データが 1 行に収まっていることだと思ったので、次のようなデータを作成しました。

d <- data.frame(x=c(1,1.1),
                y=c(1,1),
                z=c(2,3))

library(lattice)
wireframe(z~y*x,data=d)

ここで、完全な 3 次元データ (平面を定義するデータ) が正常に機能することを確認します。

d2 <- data.frame(expand.grid(x=c(1,1.1),
                             y=c(1,1.1)),
                 z=1:4)
wireframe(z~y*x,data=d2) 

問題は、実際には、線上にある 2 点のワイヤーフレームを描くつもりだったのかということです。もしそうなら、あなたはプロットに何を登場させたかったですか? 少しハックして、y値を少しだけ異なるように設定することもできます-しかし、試してみましたが、ワイヤーフレームは表示されませんでした(ただし、エラーもありませんでした)。

編集:次のことを推測するために、さまざまな呪文 (およびパッケージdebug()のソース コードとそれ自体の「負の長さ」を検索)を使用して、もう少しトレースを行いました。https://r-forge.r-project.org/scm/viewvc.php/pkg/src/threeDplot.c?view=markup&root=latticeで見ることができますlatticeRlattice:::panel.3dwirewireframePanelCalculations

この関数内:

nh = (nx-1) * (ny-1) * ng; /* number of quadrilaterals */
sHeights = PROTECT(allocVector(REALSXP, nh));

この場合nxはゼロなので、このコードは R に負の長さのベクトルを割り当てるように要求しています。これがエラーの原因です。

ただし、この場合、明示的なデバッグよりも診断の方が役立つと思います。

于 2012-10-08T15:34:41.970 に答える