2011-04-01 82 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