1

そのため、インタラクティブな選択と識別に使用するコードを少し使用しようとしています。関数の外部では機能しますが、スタンドアロン関数として実行しようとするとエラーが発生します。

my.identify <- function(data)
  {
    # allows you to create a polygon by clicking on map 
   region = locator(type = "o")  
   n = length(region$x)
   p = Polygon(cbind(region$x, region$y)[c(1:n,1),])
   ps = Polygons(list(p), ID="region")
   sps = SpatialPolygons(list(ps))

   # returns all data that overlaps new polygon sps
   a=data[!is.na(overlay(data,sps)),]    # here is the problem
   return(a)
  }

基本的には、オーバーレイ関数(spパッケージの関数)を実行する必要はありません。エラーレポートは、継承された関数を実行できないということですか?

関数(classes、fdef、mtable)のエラー:関数 "overlay"、署名 "matrix"、"SpatialPolygons"の継承されたメソッドが見つかりません

何か案は???私は関数の記述に不慣れです...だからうまくいけばそれは簡単になるでしょう。

4

2 に答える 2

1

これはうまくいくはずです。overlayは非推奨であり、over代わりに使用する必要があります。問題は、すべてのオブジェクトが であるべきだということSpatial*です。

xy <- data.frame(x = runif(40, min = -200, max = 200),
    y = runif(40, min = -200, max = 200))
plot(xy)
my.identify <- function(data) {
    # allows you to create a polygon by clicking on map 
    region = locator(type = "o")  
    n = length(region$x)
    p = Polygon(cbind(region$x, region$y)[c(1:n,1),])
    ps = Polygons(list(p), ID="region")
    sps = SpatialPolygons(list(ps))

    # returns all data that overlaps new polygon sps
    a=data[!is.na(over(SpatialPoints(data),sps)),]
    return(a)
}
ident <- my.identify(xy)
points(ident, pch = 16)

ここに画像の説明を入力

于 2011-12-05T15:37:07.827 に答える
0

関数にパッケージへの呼び出しを追加する必要があります。

 my.identify <- function(data)
 {
      require('sp')  ## Call to load the sp package for use in stand alone function
      # allows you to create a polygon by clicking on map
      region = locator(type = "o")
      n = length(region$x)
      p = Polygon(cbind(region$x, region$y)[c(1:n,1),])
      ps = Polygons(list(p), ID="region")
      sps = SpatialPolygons(list(ps))


      # returns all data that overlaps new polygon sps
      a=data[!is.na(overlay(data,sps)),]

      return(a)
 } 
于 2011-12-05T15:22:32.577 に答える