r - 具有 2 个向量参数的翻转函数
问题描述
我想对需要 2 个向量参数的函数应用滚动。这是使用 data.table 的示例(不起作用):
library(data.table)
df <- as.data.table(cbind.data.frame(x=1:100, y=101:200))
my_sum <- function(x, y) {
x <- log(x)
y <- x * y
return(x + y)
}
roll_df <- frollapply(df, 10, function(x, y) {
my_sum(x, y)})
它不识别 y 列。Ofc,解决方案可以使用 xts 或其他一些包。
编辑:这是我要应用的真正功能:
library(dpseg)
dpseg_roll <- function(time, price) {
p <- estimateP(x=time, y=price, plot=FALSE)
segs <- dpseg(time, price, jumps=jumps, P=p, type=type, store.matrix=TRUE)
slope_last <- segs$segments$slope[length(segs$segments$slope)]
return(slope_last)
}
解决方案
使用runner,您可以在滚动窗口中应用任何功能。运行窗口也可以在插入x
参数的一行 data.frame 上创建。让我们专注于更简单的功能my_sum
。runner 中的参数f
只能接受一个对象(data
在这种情况下)。我鼓励在browser()
对子集应用一些花哨的模型之前,对函数进行逐行调试(某些算法需要一些最少的观察次数)。
my_sum <- function(data) {
# browser()
x <- log(data$x)
y <- x * data$y
tail(x + y, 1) # return only one value
}
my_sum
应该只返回一个值,因为runner
计算每一行 - 如果my_sum
返回向量,你会得到一个列表。因为 runner 是一个独立的函数,你需要将 data.table 对象传递给x
. 最好的方法是使用x = .SD
(见这里为什么)
df[,
new_col := runner(
x = .SD,
f = my_sum,
k = 10
)]
推荐阅读
- apache - Mod_Rewrite index.php?page=users&id=1 to /users/4
- jquery - 如果在 beforeSend 中修改了 URL,jQuery $.ajax 数据会丢失。为什么?
- mongodb - 服务器发现和监控引擎已弃用,以前的帖子无济于事
- python - 如何同情矩阵等级 nessesary 值?
- html - 如何使用带有 HTML 值的 RichTextEditor?
- performance - BSCSCAN 上的“错误!无法生成合约字节码和 ABI”
- reactjs - 使用 React Select 提交未定义的控制器
- reactjs - 在 reactjs 中添加过渡到路由
- linux - sed - 如何删除文件中以具有已知模式的行开始并以具有已知模式的行结束的多个部分
- reactjs - 如何使用剧作家或柏树选择蚂蚁设计选择选项