将Matlab函数转换为R

时间:2015-06-13 15:51:15

标签: r matlab

我在将一段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){
    ?????????????????????
   }
}

2 个答案:

答案 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)