从输出创建一个向量

时间:2011-04-01 09:52:18

标签: r vector

我在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
}

代码中的最后一行不好,因为我想要的是一个向量(df),它为每个i从tr读取每个数字,以便df返回包含所有{的向量{1}}。

感谢任何帮助。

由于

2 个答案:

答案 0 :(得分: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 :(得分: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,取决于您的代码实际执行的操作,并且您没有提供要检查的所有对象。