列表 - 在R中执行循环计算时出现未列出错误

时间:2018-02-28 20:47:58

标签: r list

在执行4个步骤的迭代计算时,我收到错误说

  

eps [[i]] = rnorm(100,0,sigma)出错:     提供的元素多于要替换的元素

代码是:

f <- list()
residual <- list()
eps <- list()
err <-list()
y<- list()



for(i in 1:4){
eps[[i]]=rnorm(100,0,sigma)
eps<-t(sapply(eps, unlist))
y[[i]]= b0 + b1*x1  + b2*x2  + eps
y<-t(sapply(y, unlist))
residual[[i]]= e*y
f[[i]]=e*eps
err[[i]]=eps
}

请注意,b0,b1,b2,sigma是常量,x1,x2每个都是100阶的向量,e是100阶的矩阵。

2 个答案:

答案 0 :(得分:1)

  1. 您无法向矢量添加列表。我假设列表是用i。
  2. 索引的
  3. 当它已经是向量时,无需取消列表。
  4. 这是否符合您的意思?

    f <- list()
    residual <- list()
    eps <- list()
    err <-list()
    y<- list()
    sigma=1.4
    b0 <- 17 
    b1 <- 0.5 
    b2 <- 0.037
    x1 = 1:100
    x2=101:200
    e = matrix(nrow = 100, ncol = 100, data = 1:10000)
    for(i in 1:4){
      eps[[i]]=rnorm(100,0,sigma)
      #eps<-t(sapply(eps, unlist))
      y[[i]]= b0 + b1*x1  + b2*x2  + eps[[i]]
      #y<-t(sapply(y, unlist))
      residual[[i]]= e*y[[i]]
      f[[i]]=e*eps[[i]]
      err[[i]]=eps[[i]]
    }
    

答案 1 :(得分:0)

一个选项是更改行

eps[[i]]=rnorm(100,0,1)

作为

eps[[i]]=list(rnorm(100,0,1))

此外,相应的更改将如下:

b0 <- 17
b1 <- 0.5
b2 <- 0.037
for(i in 1:4){
  eps[[i]]=list(rnorm(100,0,1))
  #eps<-t(sapply(eps, unlist))
  y[[i]]= b0 + b1*x1  + b2*x2 + as.data.frame(eps[[i]])
  y<-t(sapply(y, unlist))
  residual[[i]]= e*as.data.frame(y[[i]])
  f[[i]]=e*as.data.frame(eps[[i]])
  err[[i]]=eps[[i]]
}