我正在尝试进行50次for loop
次,每次生成三列和13行数据,我将其存储在矩阵中,因此最终产品应该有13行但是150列。也就是说,每次for loop
结果都会聚合到前一个结果的右侧。
这是我的尝试:
predict.data<-matrix(nrow=13,ncol = 150)
for (i in 1:50){
x <- rnorm(15)
y <- x + rnorm(15)
new <- data.frame(x = seq(-3, 3, 0.5))
for (j in 1:nrow(new)){
predict.data[j,] <- predict(lm(y ~ x), new, interval = "prediction")
colnames(predict.data) <- paste(c("fit", "lwr","upr"), 1:50)
}
}
但是我收到以下错误:
number of items to replace is not a multiple of replacement length
也许我在代码的某个地方错过了一点。 我还需要连续粘贴列名:fit1,lwr1,upr1,fit2,lwr2,upr2,...
有人可以帮助我纠正和调整这个
fit1 lwr1 upr1 fit2 lwr2 upr2 … fit50 lwr50 upr50
1,81 1,76 1,44 1,22 1,70 1,14 … 1,97 1,45 1,16
1,67 1,46 1,52 1,89 1,43 1,02 … 1,86 1,38 1,69
1,73 1,76 1,53 1,35 1,44 1,74 … 1,92 1,22 1,01
1,72 1,89 1,12 1,55 1,81 1,21 … 1,47 1,79 1,99
1,30 1,30 1,04 1,07 1,07 1,95 … 1,20 1,08 1,59
1,64 1,94 1,73 1,10 1,59 1,28 … 1,89 1,62 1,14
2,00 1,56 1,24 1,10 1,50 1,16 … 1,59 1,25 1,88
1,64 1,03 1,58 1,84 1,57 1,33 … 1,96 1,75 1,01
1,50 1,51 1,64 1,32 1,46 1,10 … 1,71 1,68 1,35
1,94 1,50 1,28 1,64 1,90 1,54 … 1,25 1,51 1,96
1,24 1,67 1,74 1,21 1,29 1,81 … 1,63 1,91 1,82
1,81 1,90 1,28 1,85 1,59 1,13 … 1,55 1,25 1,98
1,35 1,12 1,26 1,52 1,25 1,46 … 1,75 1,84 1,09
当new
是矩阵而不是lm
我从包“glmnet”获得cv.glmnet
时,我遇到了另一个问题。我只得到最终结果三分之一的数据,即只有50列而不是150列。并且这些列号不再正确。
答案 0 :(得分:1)
这会有用......
library(magrittr) # sorry I like pipes
predict.data <- list() # versitle across data structures
for (i in 1:50){
x <- rnorm(15)
y <- x + rnorm(15)
new <- data.frame(x = seq(-3, 3, 0.5))
predict.data[[i]] <- predict(lm(y ~ x), new, interval = "prediction") %>%
magrittr::set_colnames(., paste0(colnames(.), i))
}
predict.data %<>% do.call(cbind, .) # make your wide matrix
答案 1 :(得分:0)
使用基础R.我使用cbind
predict.data<-NULL #empty object
for (i in 1:50){
x <- rnorm(15)
y <- x + rnorm(15)
new1 <- data.frame(x = seq(-3, 3, 0.5))
for (j in 1:nrow(new1)){
res <- predict(lm(y ~ x), new1, interval = "prediction")
colnames(res) <- paste0(c("fit", "lwr","upr"), i)
predict.data<-cbind(predict.data,res)
}
}