2011-04-01 69 views
1

矢量我在R上的下面的代碼:創建輸出

z <- scale(x)/sqrt(n-1) # standardized matrix x such that z'z=correlation matrix 
R <- t(z) %*% z    # correlation matrix 
I <- diag(py - 1)   # identity matrix(py defined before) 
df <- rep(0, length(k))  # k=seq(0,5,0.001) 
for (i in seq(0,5,0.001)) { 
    H <- z %*% solve(R+(i*I)) %*% t(z) 
    tr <- sum(diag(H)) 
    df <- c(df,tr)   ## problem here 
} 

在最後一行代碼並不好,因爲我要的是從tr用於讀取每個號碼的載體(df)每個我,以便DF返回一個載體,其中包含所有tr

任何幫助表示讚賞。

謝謝

回答

1

從循環索引中分離要解決的問題。

solve_points <- seq(0,5,0.001) 
for(i in seq_along(solve_points)) 
{ 
    H=z%*%solve(R+(solve_points*I))%*%t(z)  
    tr=sum(diag(H))  
    df[i] <- tr 
1

你要填寫矢量df,不串連這一切的時候。這會使R減慢很多,因爲它必須在循環的每次迭代中複製對象。

我想你也許想是這樣的:

for (i in seq_along(k)) { ## loop over 1:length(k) 
    H <- z %*% solve(R+(k[i]*I)) %*% t(z) ## use i to index into k 
    tr <- sum(diag(H)) 
    df[i] <- tr   ## add `tr` to the ith element of df 
} 

,但重複的例子,將有助於。例如,你可能不需要對k進行索引,取決於你的代碼真正在做什麼,你不提供所有的對象來檢查。

+0

非常感謝,非常有幫助 – 2011-04-02 08:26:09