我正在尝试对动物位置数据进行一些蒙特卡罗模拟。到目前为止,我已经对 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