sapply - 在 sapply 中访问向量的先前值
问题描述
我希望编写sapply
以下代码的一个版本。如您所见,for
代码将位置处的值替换为位置 和i
位置处的值的平均值。我该怎么做?i-1
i+1
sapply
test <- c(1:length(x))
if(length(which(x > mean(x) + sd(x)*3)) > 0){
for (i in 1:length(x)) {
if(x[i] > mean(x) + sd(x)*3){
x[i] <- mean(x[i-1], x[i+1])
}
else{
x[i] <- x[i]
}
}
}
else{
test <- x
}
为了生成合适的(即非正常的)测试向量,我使用rstable
了包中的函数StableEstim
。
x <- rstable(100, alpha = 1.48, beta = 0.99, gamma = 0.27, delta = 3.36)
解决方案
不确定这是否会对其他人有所帮助,但我找到了一种方法来减少我的代码的计算密集度,而无需使用sapply
:
spiker <- function(x){
l <- c(which(x > mean(x) + sd(x)*3), which(x < mean(x) - sd(x)*3))
if(length(l) > 0){
for (i in l) {
x[i] <- mean(x[i-1], x[i+1])
}
x <- x
spiker(x)
}
else{
x <<- x
}
}
唯一的问题是如果向量中的第一个或最后一个元素x
满足 3 sd 标准,则不会计算平均值。
推荐阅读
- java - 杰克逊从 java 字符串中删除反斜杠,为什么?
- ios - 手表无法通过 WatchConnectivity 接收来自手机的回复
- java - 如何以编程方式在布局内生成文本视图
- c - # (hash) 的特定名称,如 #include、#define 等预处理器指令
- javascript - 在 Syncfusion 日期范围选择器(React JS)中应用自定义样式
- c - 函数的参数。local or 是调用函数的变量
- regex - 正则表达式贪婪匹配失败?
- leaflet - 如何使用 osmosis 或 osmium 清理 *.osm.pbf 文件(删除不需要的节点、关系、方式)
- terminal - ValueError:没有足够的值来解包(预期 2,得到 0)
- mysql - MySQL性能架构推荐开启哪些监控和采集指标?