我有30个数据集,这些数据集组合在一个数据列表中。我想通过L function
和随机测试一起分析空间点模式。代码如下。
第一个代码适用于单个数据集(data1),但是如第二个代码所示,一旦使用lapply()
函数将其应用于数据集列表,它就会给我一个很长的错误,
“ Kcross(X,i,j,...)中的错误:没有点标记i =伞形科 信封错误(X = X,fun = fun,simul = simrecipe,nsim = nsim ,:超出最大错误数”
有人可以告诉我第二代码有什么问题吗?
grp <- factor(data1$species)
window <- ripras(data1$utmX, data1$utmY)
pp.grp <- ppp(data1$utmX, data1$utmY, window=window, marks=grp)
L.grp <- alltypes(pp.grp, Lest, correlation = "Ripley")
LE.grp <- alltypes(pp.grp, Lcross, nsim = 100, envelope = TRUE)
plot(L.grp)
plot(LE.grp)
L.LE.sp <- lapply(data.list, function(x) {
grp <- factor(x$species)
window <- ripras(x$utmX, x$utmY)
pp.grp <- ppp(x$utmX, x$utmY, window = window, marks = grp)
L.grp <- alltypes(pp.grp, Lest, correlation = "Ripley")
LE.grp <- alltypes(pp.grp, Lcross, envelope = TRUE)
result <- list(L.grp=L.grp, LE.grp=LE.grp)
return(result)
})
plot(L.LE.sp$LE.grp[1])
答案 0 :(得分:0)
此问题与R软件包spatstat
有关。
如果您可以添加一个包含说明此问题的数据的最小工作示例,这会有所帮助。
如果不可用,请在计算机上生成错误,然后键入traceback()
并捕获输出并将其发布到此处。这将跟踪错误的位置。
没有这些信息,我的最佳猜测是:
错误消息显示No points have mark i=Acoraceae
。这意味着代码期望一个点模式包含Acoraceae
类型的点,但是发现没有。之所以会发生这种情况,是因为在alltypes(... envelope=TRUE)
中,代码会根据完整的空间随机性生成随机点模式。在模拟的模式中,根据泊松分布,伞形科类型的点数(例如)将是随机的,其平均值等于观测数据中伞形科类型的点数。如果实际数据中的伞形科数量很少,那么很有可能模拟模式将根本不包含伞形科。这可能是导致错误消息No points have mark i=Acoraceae
的原因。
如果这种解释是正确的,那么您应该可以通过包含参数fix.marks=TRUE
来抑制错误,即
alltypes(pp.grp, Lcross, envelope=TRUE, fix.marks=TRUE, nsim=99)
我并不是说这对您的应用程序来说是适当的,但是如果我的猜测正确的话,这应该会删除错误消息。
在github上提供的spatstat
的最新开发版本中,对envelope
的代码进行了调整以检测此错误。