2016-04-25 57 views
-1

我很抱歉問一個已被問了上千次的問題,但我似乎仍然無法解決我的問題。R不一致的論據

我試圖運行這個雙循環:

rho=matrix(0,12,1) 

for (i in 1:k){ 
    for (j in 1:n-k){ 
    temp=((1/(sigma^2))*(1/(n-i)))*((as.matrix(vR)[j,]-mean)%*%(as.matrix(vR)[i+j,]-mean)) 
    rho[i,]=temp 
    } 
}  

我不斷收到錯誤:

Error in (as.matrix(vR)[j, ] - mean) %*% (as.matrix(vR)[i + j, ] - mean) : non-conformable arguments

而且,我的公式是:

(1/sigma^2) * (1/(t-k)) * sum[(vR(t)-mean)*(vR(t+k)-mean)] 

總和「大西格瑪「從t = 1到Tk

是否可以像我在做的那樣運行它?

+1

你能把這個重複性..所以其他人可以運行它? – cory

+0

也許你想'm [k,,drop = FALSE]'和'm [,k,drop = FALSE]' – Frank

+0

@cory我添加了一些數據,希望你現在可以運行它。 – Anders

回答

2

有一種更安全的方法來處理向量的「矩陣乘法」,即crossprod函數。此外,我認爲你的錯誤可能會在很大程度上來自SEQ功能的運算符優先級實際上幹「:」在內部循環索引設置過「 - 」功能:

for (i in 1:k){ 
for (j in 1:(n-k)){ # note inner parentheses, safer to always use with "(" 
temp=((1/(sigma^2))*(1/(n-i)))*crossprod(vR[j,]-mean,vR[i+j,]-mean) 
rho[i,]=temp 
} 
} 
+0

非常感謝您的幫助。這解決了我的問題,我的結果看起來像一些很好的價值。循環中的假設就是它所需要的。你剛剛救了我的偶像:) – Anders