【问题标题】:"For" loop output issue in RR中的“For”循环输出问题
【发布时间】:2013-05-29 14:35:31
【问题描述】:

我正在努力解决“for”循环中的输出分配问题:我生成了一个空矩阵(“结果”),它具有适当的(不是吗???)维度,循环应该分配函数的输出(请),但我收到一个错误......这是代码:

library(pls)
set.seed(10000)
mat <- replicate(100, rnorm(100))
y <- as.matrix(mat[,1], drop=F)
x <- mat[,2:100]
min.nc <- 3
max.nc <- 8
nc <- seq(min.nc, max.nc)
results <- matrix(NA, length(nc), 1)
for(q in nc) {
  pls <- plsr(y ~ x, ncomp = q)
  results[q,] <- RMSEP(pls, intercept=F, estimate="train")$val[1,1,q]
}

运行“for”循环后的错误信息是:

Error in `[<-`(`*tmp*`, q, , value = 0.329631604369802) : 
  subscript out of bounds

...我不明白,因为迭代器“nc”的大小正好是“length(nc)”。有什么想法吗?

非常感谢您的时间和帮助!

切加

【问题讨论】:

    标签: r loops


    【解决方案1】:

    您的 q 是 3:8,您的矩阵 results 是 1:6。因此,当它尝试分配results[q,]q &gt; 6 时,您会收到此错误。

    > results[7,]
    Error in results[7, ] : subscript out of bounds
    

    q 的值是nc 的每个值,而不是seq_along(nc)

    for (q in nc) print(q) 
    

    对比

    for (q in seq_along(nc)) print(nc[q])
    

    【讨论】:

    • 所以 seq_along() 是我显然缺少的工具!非常感谢您的帮助!
    • 天真的方法是1:length(nc),但如果nc 的长度为0 或不存在,这会以惊人的方式失败。
    • 我明白了——在大多数情况下,当 1:length() 看起来很方便时,我可以使用 seq_along() 和 seq_len()...
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 2011-06-10
    • 2017-05-14
    • 2020-02-03
    • 2018-11-02
    • 2015-01-19
    • 2015-01-19
    相关资源
    最近更新 更多