出力

2011-04-01 10 views
1

からベクトルを作成するI持ち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)があるとして、コードの最後の行は、良いではありません各iは、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

ありがとう、非常に役立つ –