- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很想创建一系列滚动误差函数。我有以下数据:
dat <- data.frame(
date <- seq.Date(from = as.Date("2010-01-01"), by = 1, length.out = 100),
pred <- sample(1000, 100, replace = FALSE),
actual <- sample(1000, 100, replace = FALSE)
) %>%
setNames(c("date", "pred", "actual"))
看起来像:
date pred actual
1 2010-01-01 99 835
2 2010-01-02 429 779
3 2010-01-03 726 581
我想使用 rollapply
函数来创建滚动平方误差。我可以使用以下内容来创建滚动方式
window_size = 30 + 1 -1
dat %>%
arrange(desc(date)) %>%
mutate(
error = (pred - actual),
squared_error = error**2,
#rolling calcs
rolling_mean_error = c(rollapply(error, width = window_size, by = 1, FUN = mean), rep(NA, window_size - 1))
)
但是,我想使用 squared_error
函数。
squared_function <- function(err){
err**2
}
dat %>%
arrange(desc(date)) %>%
mutate(
error = (pred - actual),
squared_error = error**2,
#rolling calcs
rolling_mean_error = c(rollapply(error, width = window_size, by = 1, FUN = mean), rep(NA, window_size - 1)),
rolling_squared_error = c(rollapply(error, width = window_size, by = 1, FUN = squared_function), rep(NA, window_size - 1))
)
但是,它失败并出现以下错误:
Error:
mutate()
argumentrolling_squared_error
must be recyclable. ℹrolling_squared_error
isc(...)
. xrolling_squared_error
can't be recycled to size 100. ℹrolling_squared_error
must be size 100 or 1, not 2159
编辑:
图书馆:
library(dplyr)
library(zoo)
最佳答案
您的squared_function
应返回单个数字,而不是与输入长度相同的向量。我怀疑您需要 sum(err**2)
(平方和)或 sqrt(sum(err**2))
。
试试这个:
set.seed(42)
dat <- tibble(
date = seq.Date(from = as.Date("2010-01-01"), by = 1, length.out = 100),
pred = sample(1000, 100, replace = FALSE),
actual = sample(1000, 100, replace = FALSE)
) %>%
setNames(c("date", "pred", "actual"))
window_size <- 30 + 1 -1
squared_function <- function(err) sum(err**2)
dat2 <- dat %>%
arrange(desc(date)) %>%
mutate(
error = (pred - actual),
squared_error = error**2,
rolling_mean_error = zoo::rollapply(
error, width = window_size, by = 1, FUN = mean,
align = "left", fill = NA),
rolling_squared_error = zoo::rollapply(
error, width = window_size, by = 1, FUN = squared_function,
align = "left", fill = NA)
)
dat2
# # A tibble: 100 x 7
# date pred actual error squared_error rolling_mean_error rolling_squared_error
# <date> <int> <int> <int> <dbl> <dbl> <dbl>
# 1 2010-04-10 558 659 -101 10201 -93.7 5334540
# 2 2010-04-09 672 671 1 1 -88.6 5326839
# 3 2010-04-08 466 102 364 132496 -70.7 5616282
# 4 2010-04-07 302 481 -179 32041 -67.0 5711315
# 5 2010-04-06 665 49 616 379456 -66.6 5707835
# 6 2010-04-05 839 66 773 597529 -86.8 5328479
# 7 2010-04-04 954 908 46 2116 -103. 4817975
# 8 2010-04-03 190 118 72 5184 -92.8 4935575
# 9 2010-04-02 1 713 -712 506944 -90.2 4952295
# 10 2010-04-01 608 944 -336 112896 -53.0 4610187
# # ... with 90 more rows
align="left"
的解释。
每次调用 squared_function
时,都会给它 30 个数字并需要返回 1。一个问题:那个数字放在哪里?
让我们看一个人为的例子:
vec <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
zoo::rollapply(vec, 5, FUN = mean)
# [1] 3 4 5 6 7 6 5 4 3 2 3 4 5 6 7 6
结果是 16 长。当我们需要它与原始向量的长度相同时,我们可以使用 fill=NA
将其填充到相同的长度。但这引出了一个问题:每个数字都去了哪里?
zoo::rollapply(vec, 5, FUN = mean, fill = NA)
# 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
# `------. ,--------'
# v
# __, __, __, __, __
# 3, align="left"
# NA, NA, 3 align="right"
# NA, NA, NA, NA, 3 align="right"
关于滚动平方根和其他功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60741135/
出于某种原因,我的平方根程序得到的答案与大多数输入应得到的答案略有不同。我不确定这是为什么。只有某些输入是错误的。在给出答案后的最后我也遇到了段错误,我不确定为什么会这样。 #include #inc
我目前正在实现一个可以处理与物理单位相关的数字数据的类。 我想实现一种计算实例平方根的方法。假设您有一个具有属性值和名称的类的实例: from math import sqrt class Foo:
我正在使用 HTML + CSS + AngularJS 制作一个简单的计算器。一切正常,但我想添加一个 SquareRoot 函数。这是一些代码: function _solve(){ switc
问题是关于在通用数值接口(interface)中定义平方根算法的问题的策略方法。我知道存在解决不同条件下问题的算法。我对以下算法感兴趣: 仅使用选定的函数解决问题; 不关心操作的对象是整数、 floa
好吧,我已经研究了一段时间了,我知道我的逻辑是正确的,但是,我似乎无法生成正数的正确底平方根。 public int mySqrt(int x) { if(x 0) uppe
我找不到让这个函数 Math.sqrt(value) 工作的方法。 (╯°□°)╯︵┻━┻我不确定,但问题似乎出在运营商。我还尝试在 const calculation 中添加该函数,但它也不起作用。
我发现了这段获得平方根的代码,令我惊讶的是它的工作方式,使用 union 和位移这是代码: float sqrt3(const float x) { union { int i;
在 python 中使用 sqrt 函数时,我遇到了“distance ValueError: math domain error”问题。 这是我的代码: from math import sqrt
我一直在做一些研究,寻找一种对大整数进行运算的相对快速的平方根算法。我在这里找到了几个例程。第一个(下面)是用 C 语言编写的... int isqrt(int n) { int b = 0;
好吧,我想知道 math.h 平方根与其中包含神奇数字的那个(因 Quake 而出名,但由 SGI 制作)相比有多快。 但这对我来说是一个受伤的世界。 我首先在 Mac 上尝试了此操作,其中 math
有谁知道如何解决这个复发? 大定理在这里不起作用。 最佳答案 这在 O(1) 中似乎很明显,因为 T(n) = T(n - sqrt(n)) = T(m) with 0 < m < n 通过归纳,你得
我是一名优秀的程序员,十分优秀!