【发布时间】:2012-05-16 18:37:49
【问题描述】:
我在开发生态模拟时遇到了一个问题。我在下面附上了一些代码来突出这个问题。总之,假设我有 3 个不同质量的位置。动物想要移动到最高质量的位置(数字越大,质量越高),但无法区分差异小于或等于 0.1 的质量(这是更大循环的一部分,所以这个过程会得到重复数千次)。
例如,在这种情况下(个人从位置 #2 开始):
a<-matrix(c(1,2,3,.6,.9,.7),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
[,1] [,2] [,3]
Location 1.0 2.0 3.0
Quality 0.6 0.9 0.7
个人会清楚地辨别位置 #2 是最好的,并留在那里。
在这种情况下(个人从位置 #2 开始):
a<-matrix(c(1,2,3,.5,.7,.8),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
[,1] [,2] [,3]
Location 1.0 2.0 3.0
Quality 0.5 0.7 0.8
个人将无法清楚地区分 #2 和 #3 的质量(因为差异需要至少为 0.1 才能检测到),这将触发替代行为(这可能涉及个人留在#2,或评估本示例中不存在的更多位置)。但是,我需要知道位置 #2 和 #3 在质量上接近,而位置 #1 被排除在选项之外。
在这种情况下(同样,从位置 #2 开始)
a<-matrix(c(1,2,3,.9,.7,.6),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
[,1] [,2] [,3]
Location 1.0 2.0 3.0
Quality 0.9 0.7 0.6
个人将从位置 2 移动到位置 1。
在这种情况下(同样,从位置 #2 开始)
a<-matrix(c(1,2,3,.8,.7,.6),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
[,1] [,2] [,3]
Location 1.0 2.0 3.0
Quality 0.8 0.7 0.6
个人会根据位置 #3 与位置 #1 的差异来消除位置 #3,并且无法选择留在 #2 还是搬到 #1
我试图弄清楚如何编写一个代码来比较位置的相对质量,如果个人无法区分位置(如果是,它在哪些位置之间进行选择),或者如果一个位置显然更大(如果是这样,它需要返回位置编号,以便我可以将个人移动到另一个矩阵中的那个位置)。
【问题讨论】:
-
您需要查看cran.r-project.org/web/views/Spatial.html 并学习如何创建空间数据框架。矩阵不是将此任务推广到二维或更多维度的好选择。
-
从问题来看,尚不清楚这是否是一个明确的空间模型。如果动物可以评估并移动到景观中的任何单元格,那么它们的空间排列就无关紧要了。另一方面,如果动物仅限于评估和在相邻细胞之间移动,那么位置确实很重要。了解每个位置的质量是否发生变化,或者它们的排名是否在整个模拟过程中保持不变也很有用。仅凭这个 sn-p 很难提供明确的建议。
-
泰勒,感谢您的评论。这在空间上是明确的(目前有 20 个位置,但这可能会改变),并且随着个体在栖息地之间移动,“质量”衡量标准会经常变化。个人只能对相邻的补丁进行采样,而我对构建良好的所有问题都存在疑问。我现在可以确定一个人要比较的位置,并且可以以上述方式提取这些位置和质量。现在我已经确定了个人可以比较哪些补丁,我需要做的就是找出一种方法来做出上述决定