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

时间:2019-03-16 18:11:59

标签: r function lapply spatstat

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

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的代码进行了调整以检测此错误。