R 中 lapply() 函数内与随机化测试相关的错误

Error related to randomisation test within lapply() function in R

我有 30 个数据集组合在一个数据列表中。我想通过 L function 以及随机化测试来分析空间点模式。代码如下。 第一个代码适用于单个数据集 (data1),但是一旦它应用于具有 lapply() 函数的数据集列表,如第二个代码所示,它会给我一个很长的错误,如

"Error in Kcross(X, i, j, ...) : No points have mark i = Acoraceae Error in envelopeEngine(X = X, fun = fun, simul = simrecipe, nsim = nsim, : Exceeded maximum number of errors"

有人能告诉我第二个代码有什么问题吗?

 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])

这个问题是关于 R 包的spatstat

如果您可以添加一个最小的工作示例(包括证明此问题的数据),将会有所帮助。

如果不可用,请在您的计算机上生成错误,然后键入 traceback() 并捕获输出并在此处 post。这将跟踪错误的位置。

没有这些信息,我最好的猜测如下: 错误消息显示 No points have mark i=Acoraceae。这意味着代码期望点模式包含 Acoraceae 类型的点,但发现有 none。之所以会发生这种情况,是因为在 alltypes(... envelope=TRUE) 中,代码根据完全的空间随机性生成随机点模式。在模拟模式中,Acoraceae 类型的点数(例如)将根据泊松分布随机分布,平均值等于观察数据中 Acoraceae 类型的点数。如果实际数据中的 Acoraceae 数量很少,那么模拟模式很可能根本不包含 Acoraceae。这可能是导致错误消息 No points have mark i=Acoraceae 的原因。

如果这个解释是正确的,那么您应该能够通过包含参数 fix.marks=TRUE 来抑制错误,即

alltypes(pp.grp, Lcross, envelope=TRUE, fix.marks=TRUE, nsim=99)

我并不是说这一定适合您的应用程序,但如果我的猜测是正确的,这应该会删除错误消息。

spatstat 的最新开发版本中,在 github 上可用,已调整 envelope 的代码以检测此错误。