提问人:TheGoat 提问时间:5/14/2023 更新时间:5/14/2023 访问量:26
R 中的嵌套函数
Nested functions in R
问:
我正在尝试实现此处描述的函数,该函数用于检测时间序列对象中的异常值。
我正在尝试将代码汇总到单个函数中,其中时间序列向量、窗口和阈值在外部函数中指定。
不幸的是,我无法让它在我的示例上工作,我收到以下错误:
zoo(do.call(“c”, dat), index(data)[ix], attr(data, “frequency”)) : “x” : 尝试定义无效的 zoo 对象
这是我使用的数据,直接取自上面链接的示例:
n.length <- 1150
cycle.a <- 11
cycle.b <- 365/12
amp.a <- 800
amp.b <- 8000
set.seed(17)
x <- 1:n.length
baseline <- (1/2) * amp.a * (1 + sin(x * 2*pi / cycle.a)) * rgamma(n.length, 40, scale=1/40)
peaks <- rbinom(n.length, 1, exp(2*(-1 + sin(((1 + x/2)^(1/5) / (1 + n.length/2)^(1/5))*x * 2*pi / cycle.b))*cycle.b))
y <- peaks * rgamma(n.length, 20, scale=amp.b/20) + baseline
这是我的汇总函数:
mad_function <- function(vec, threshold, window){
upper_thresh <- function(vec) {
# CALCULATE THE MEDIAN OF THE WINDOW
m <- median(vec)
# CALCULATE THE MEDIAN ABSOLUTE DEVIATION
median(vec) + threshold * median(abs(vec - m))
return(upper_thresh)
}
# CALCULATE THE MEAN ABSOLUTE DEVIATIONS FOR EACH ROLLING WINDOW
mads <- rollapply(zoo(vec), window, upper_thresh, align = "right")
# CONCATENATE THE FIRST VALUE OF THE MADs VECTOR TO THE MADs RESULT ABOVE DUE TO THE ROLLING WINDOW EFFECT
mads <- c(rep(mads[1], window - 1), mads)
# IDENTIFY IF POINTS ARE OUTLIERS OR INLIERS
outliers <- vec > mads
return(outliers)
}
我正在尝试在 y 变量上运行此函数,但这是我收到错误的地方:
mad_function(vec = y, threshold = 5, window = 30)
根据错误,我猜 rollapply 部分没有“vec”的“可见性”,但我不确定如何解决这个问题。
任何帮助将不胜感激。
答: 暂无答案
评论
upper_thresh
return
upper_thresh