【问题标题】:create a vector from outputs从输出创建一个向量
【发布时间】:2011-04-01 09:52:17
【问题描述】:

我在 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),它从tr中为每个i读取每个数字,以便df返回一个包含所有tr的向量。

感谢任何帮助。

谢谢

【问题讨论】:

    标签: r vector


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      你想填写向量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,这取决于您的代码实际在做什么,并且您不提供所有要检查的对象。

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 2016-05-22
        • 2019-10-03
        • 2016-08-18
        • 2021-04-11
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多