我在将一段matlab代码翻译成R时遇到了很多麻烦。我可能在概念上遗漏了一些东西。我的matlab整体是:
nobs = 2000;
x = cumsum([0;randn(nobs,1)/sqrt(nobs)]);
k = 1;
n = size(x,1);
dx = zeros(n-k,1);
% to calculate dx - This is the part I am having trouble with
for i = k : n - 1
sumx = 0;
for j = 0 : k
sumx = sumx + (-1)^j*nchoosek(k,j)*x(i-j+1);
end
dx(i-k+1) = sumx;
end
我试图制作一个有效的功能。但是这个函数只执行matlab代码的以下部分:
for j = 0 : k
sumx = sumx + (-1)^j*nchoosek(k,j)*x(i-j+1);
end
到目前为止,我已在R中完成此操作,这对应于故障代码的第一部分:
function (n,i,k){
sumx <- 0
for (j in 0:k){
term <- ((-1)^j)*choose(k,j)*xsub((i-j)/n)
sumx <- sumx + term
}
return(sumx)
}
现在这种方法有效,但是我无法将它与我相提并论?
for (k in 1:2){
for (i in k:10){
?????????????????????
}
}
答案 0 :(得分:1)
我在这里没有matlab。因此,将结果与已知序列进行比较,例如derivedData
rse=c(1:5)/100
nobs = 2000; rse=rnorm(nobs) #rse=c(1:5)/100 x = cumsum(c(0,rse/sqrt((length(rse)))); k = 1; n = length(x); dx = rep(0,n-k); for (i in k:(n - 1)){ sumx = 0; for (j in 0:k) sumx = sumx + (-1)^j*choose(k,j)*x[i-j+1]; dx[i-k+1] = sumx; } plot(dx~x[-(1:k)],col=3)
答案 1 :(得分:1)
这是使用矢量化的一种方式。通常在R中,如果你使用for循环,那么有更好的方法。
.resx
但需要注意的是,由于nobs <- 2000
x <- cumsum(c(0, rnorm(nobs)/sqrt(nobs)))
k <- 1
n <- length(x)
dx <- numeric(n - k)
is <- k:(n - 1)
dx[is - k + 1] <- sapply(is, function(i) sum((-1) ^ j * choose(k, j) * x[i - j + 1]))
和k = 1
,因此select语句的评估结果为j = c(0,1)
。
所以整个过程可以完成:
c(1, 1)