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
的代码以检测此错误。
我有 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
的代码以检测此错误。