r - 使用R中Trend包的Pettitt.test(x)函数对栅格堆栈进行变化点检测
问题描述
我有一个包含 38 层、大型栅格堆栈的 NDVI 时间序列数据集,并且想使用 Trend 包的 Pettitt.test (x) 函数检测变化点,但是当我运行以下代码时收到错误消息:
library(sp)
library(raster)
library(rgdal)
library(trend)
# example dataset with 27 layers
s <- stack(system.file("external/rlogo.grd", package="raster"))
s <- stack(s, s* 2, s*3)
ss <- stack(s, s* 2, s*3)
# calculating change point k
fun2 <- function(x){
if(length(na.omit(x))<27) return(c(NA))
pttest <- pettitt.test(ts(na.omit(x)))
vl <-pttest$estimate
return(c(vl))
}
p.test<-calc(ss,fun2)
它返回以下错误
Error in setValues(out, x) :
values must be numeric, integer, logical or factor
为什么?有没有人可以帮我解决这个问题?谢谢!!!
解决方案
此错误的原因是pttest$estimate
可能有多个值。如果您像这样更改功能,错误就会消失
fun3 <- function(x){
x <- na.omit(x)
if (length(x) < 27) return(NA)
pttest <- pettitt.test(ts(x))
v <- pttest$estimate
v[1]
}
p.test<-calc(ss, fun3)
或者如果你想有两个值,像这样
fun4 <- function(x){
x <- na.omit(x)
if (length(x) < 27) return(c(NA, NA))
pttest <- pettitt.test(ts(x))
v <- pttest$estimate
rep_len(v, 2)
}
p.test<-calc(ss, fun4)
推荐阅读
- ios - 深度链接二维码在 iOS 14 中打开 Safari 而不是 App
- python - Python 尝试返回致命错误,除非在 pyinstaller 中编译
- typescript - Jest & TypeScript:VS Code 找不到名称
- java - 在运行时将数据加载到 hazelcast
- leaflet - 检查重复标记传单风水师
- python - 如何在没有 Numpy 库的 python 中找到特征值和特征向量?
- python - 在 IBM 的技能实验室(在线 Jupyter 笔记本)中使用 Selenium Webdriver 和 Python 时出错
- reactjs - Reactjs - TypeError:无法读取未定义的属性“项目”
- python - 如何检查python中特定单词的不同组合?
- python - 尝试访问 Google 表格时出现“没有响应的访问令牌”错误