Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
矢量化window.zoo over start=和end=_R_Vectorization_Zoo - Fatal编程技术网

矢量化window.zoo over start=和end=

矢量化window.zoo over start=和end=,r,vectorization,zoo,R,Vectorization,Zoo,我有这样的输入数据(示例中简化为两个时间序列) 该函数应再现此循环的行为 out <- c() for(i in 1:ncol(data)) { x <- zoo(data[,i], x.Date) xSub <- window(x, start = begin[i], end = end[i]) out <- c(out, mean(xSub)) } out另一个答案,它真实地展示了向量化解决方案如何做for循环所做的任何事情 fun <- fu

我有这样的输入数据(示例中简化为两个时间序列)

该函数应再现此循环的行为

out <- c()
for(i in 1:ncol(data)) {
  x <- zoo(data[,i], x.Date)
  xSub <- window(x, start = begin[i], end = end[i])
  out <- c(out, mean(xSub))  
}

out另一个答案,它真实地展示了向量化解决方案如何做for循环所做的任何事情

fun <- function(data, begin, end, dates) {
  x <- zoo(data, dates)
  paircount <- 1:length(begin)
  sapply(paircount, function(i) mean(window(x[,i], start=begin[i], end=end[i]), na.rm=TRUE))
}

fun
mappy
可能是最好的方法

fun <- function(data, begin, end, dates) {
  x <- zoo(data, dates)
  step1 <- mapply(window, start=begin, end=end, MoreArgs=list(x=x))
  sapply(step1, colMeans, na.rm=TRUE)
}

fun创建要使用的动物园对象,将其转换为动物园对象列表,并在其上绘制
Map
(或
mapply


z是否要传递一个开始值向量和一个结束值向量,并让函数返回一个向量,其值是逐对计算的结果?@J.Won。这正是我想要实现的。我编辑了这个问题来说明这一点。也许,请参见
mappy
mappy(函数(j,b,e)fun2(数据[,j],b,e,x.Date)),seq_len(ncol(数据)),begin,end)
谢谢,我喜欢这个,效果很好。略加修改。是的,这是我最初的做法。不过,要使用mapply调用中的
x
变量,需要将
window
矢量化。但是,在
x
的正确维度上对其进行矢量化听起来并不容易。我们对每一对
begin
/
end
进行评估,但只对
x
的一个值进行评估。这就是为什么在MoreArgs列表中分别传递
x
out <- c()
for(i in 1:ncol(data)) {
  x <- zoo(data[,i], x.Date)
  xSub <- window(x, start = begin[i], end = end[i])
  out <- c(out, mean(xSub))  
}
fun <- function(data, begin, end, dates) {
  x <- zoo(data, dates)
  paircount <- 1:length(begin)
  sapply(paircount, function(i) mean(window(x[,i], start=begin[i], end=end[i]), na.rm=TRUE))
}
fun <- function(data, begin, end, dates) {
  x <- zoo(data, dates)
  step1 <- mapply(window, start=begin, end=end, MoreArgs=list(x=x))
  sapply(step1, colMeans, na.rm=TRUE)
}
z <- zoo(data, x.Date)
Map(window, as.list(z), start = begin, end = end)