开发者

create a vector from outputs

I have the following code in 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
}

The last line in the code is not good, as what I want is a vector (df) that reads each number from tr for each i, so that 开发者_Python百科df returns a vector containing all tr.

Any help is appreciated.

Thanks


Separate the points that you want to solve at from the loop index.

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


You want to fill in the vector df, not concatenate it all the time. That will slow R down a lot as it has to copy the object each iteration of the loop.

I think you probably want something like this:

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
}

but a reproducible example would have helped. For example, you might not need to index k, depends on what your code is really doing and you don;t provide all the objects to check.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜