2016-10-11 8 views
0

私は〜250 ClarkとEvansテスト(clarkevans.test)を手動で実行することを避けようとしています。clarkとevansテスト用に複数のowinを作成するにはどうすればいいですか?

エクセルファイルにxmin、xmax、ymin、ymax座標の表があります。各行は操作ウィンドウの寸法です。

エクセルファイル(read.csv)をRに読み込んだ後、 "apply"と "owin"という形式を取って、各行のためのowinを出力することはできません。最終的にpppを作成して同様の方法でclarkevans.testを実行する必要がありますが、今はこの最初のステップで助けが必要です。

coordin<-read.csv("Coordin.csv") 
cdf<-data.frame(coordin) 
> cdf 
     xmin xmax ymin ymax 
1 456741 456841 3913505 3913605 
2 453341 453441 3915805 3915905 
3 453441 453541 3915805 3915905 
4 452441 452541 3915705 3915805 
5 453741 453841 3915705 3915805 

私はいくつかのバリエーションを試しましたが、何もできません。

lapply(cdf, function(x) owin(xmin, xmax, ymin, ymax)) 
+0

あなたがこれまでに試してみましたが、データがどのように組織化されているもののいくつかのサンプルコードを提供する場合、それは容易になるだろう。私はあなたが説明したことに基づいて以下の答えを出そうとします。 –

+0

私の質問にお返事ありがとうございます。自分のデータとコードを追加しました。私が読んだことのほとんどがそれらを使用することを避けて言ったので、私はループのために何もしようとしなかった。私はあなたが "apply"で与えた例を試してみましたが、もう一度、xrange、yrangeのいずれかが指定されていれば、どちらも同じでなければならないというエラーが出ました。 – JZA

+0

私は働くための適用方法を得ました!ご協力いただきありがとうございます、私はそれを感謝します。 – JZA

答えて

0

あなたは簡単に にステップを追加することができますので、私は、forループ、このための推薦あなたは遠いことを得るときpppオブジェクトを生成します。

library(spatstat) 
# Test data: 
dat <- data.frame(xmin = 1:3, xmax = 2:4, ymin = 1:3, ymax = 2:4) 
# List of owin initialised as unit squares: 
win_list <- replicate(nrow(dat), owin(), simplify = FALSE) 
# For loop to make each owin: 
for(i in seq_len(nrow(dat))){ 
    # Vector of owin values: 
    v <- as.numeric(dat[i, ]) 
    # Finally create the owin object 
    win_list[[i]] <- owin(v[1:2], v[3:4]) 
} 

その後owinオブジェクトのリストが正確に含まれていあなたが期待するもの:

win_list 
#> [[1]] 
#> window: rectangle = [1, 2] x [1, 2] units 
#> 
#> [[2]] 
#> window: rectangle = [2, 3] x [2, 3] units 
#> 
#> [[3]] 
#> window: rectangle = [3, 4] x [3, 4] units 

apply:

apply(dat, 1, function(x) owin(c(x[1], x[2]), c(x[3], x[4]))) 
#> [[1]] 
#> window: rectangle = [1, 2] x [1, 2] units 
#> 
#> [[2]] 
#> window: rectangle = [2, 3] x [2, 3] units 
#> 
#> [[3]] 
#> window: rectangle = [3, 4] x [3, 4] units 
0

owin(xmin,xmax,ymin,ymax)owinを呼び出すため有効な構文ではありませんので、元のコードは動作しませんでした。

有効な構文の1つはowin(c(xmin,xmax), c(ymin,ymax))です。

以下は、列があるxmin,xmax,ymin,ymaxデータフレームdfに働くだろう:

apply(df, 1, function(z) owin(z[1:2], z[3:4]) 
関連する問題