0

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

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)”。有任何想法吗?

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

切加

4

1 回答 1

4

q的是 3:8,你的矩阵results是 1:6。因此,当它尝试分配results[q,]时,q > 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])
于 2013-05-29T14:42:18.243 回答