我在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}}。
感谢任何帮助。
由于
答案 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,取决于您的代码实际执行的操作,并且您没有提供要检查的所有对象。