動物の位置データに対してモンテカルロ シミュレーションを実行しようとしています。これまでに、100 回の X 座標と Y 座標を 100 回サンプリングしました。これにより、200 個のリストが得られます。次に、このリストを、各サンプル (kernel.area) に対して実行したい最終的な関数をより助長するデータフレームに変換します。
現在、200 列のデータ フレームがあり、連続する列の各ペアを使用して kernel.area 関数を実行したいと考えています。
ここでは自分のデータをうまく再現できないので、使用しているデータ フレームの構造を示すためだけに、基本的な例を示してみました。これまでに試した for ループを含めましたが、私はまだ R の初心者であり、提案をいただければ幸いです。
# generate dataframe representing X and Y positions
df <- data.frame(x=seq(1:200),y=seq(1:200))
# 100 replications of sampling 100 "positions"
resamp <- replicate(100,df[sample(nrow(df),100),])
# convert to data frame (kernel.area needs an xy dataframe)
df2 <- do.call("rbind", resamp[1:2,])
# xy positions need to be in columns for kernel.area
df3 <- t(df2)
#edit: kernel.area requires you have an id field, but I am only dealing with one individual, so I'll construct a fake one of the same length as the positions
id=replicate(100,c("id"))
id=data.frame(id)
これが私が試したforループの構造です(最初の投稿以降に編集されました):
for (j in seq(1,ncol(df3)-1,2)) {
kud <- kernel.area(df3[,j:(j+1)],id=id,kern="bivnorm",unin=c("m"),unout=c("km2"))
print(kud)
}
私の最終目標はkernel.area
、各リサンプリング イベント (つまり、200 までの列のペアごとに行 1:100) を計算し、結果をデータフレームに結合できるようにすることです。ただし、ループを実行した後、次のエラー メッセージが表示されます。
Error in df[, 1] : incorrect number of dimensions
編集:ID形式がデータフレームと同じではないことに気付いたので、変更するとエラーが発生しました:
Error in kernelUD(xy, id, h, grid, same4all, hlim, kern, extent) :
id should have the same length as xy