运行循环并接收错误消息

时间:2015-07-10 13:39:34

标签: r

c <- 3  # set the initial numbers
d <- acadfull[,c]
i <- 1
p <- 1
data <- data.frame()

while (i < 123 ) {     #loop

  ANS <- lm(caco ~ d, data=acadfull)

  data[p,1] <-  ANS$coefficients                             

  c <- c+1  
  i <- i+1
  p <- p+1
  d <- acadfull[,c]

  if (i==123)
    break

}

write.csv(c(snp,pos,data),"reg_results", row.names=F)

真的很感激任何帮助!当我运行上面的脚本时,我收到一条错误消息

Error in `[<-.data.frame`(`*tmp*`, p, 1, value = c(1.48484848484849,      -0.0104895104895094,  : 
  replacement has 6 rows, data has 1

运行此行时出现错误

 ANS <- lm(caco ~ d, data=acadfull)

2 个答案:

答案 0 :(得分:2)

您不能像这样对数据框进行子集,因为您告诉数据框要更改不存在的地方:

x <- data.frame()
x[ ,1]<-c(1, 2, 3)

会给你同样的错误。

您可以通过多种方式解决此问题。

最简单(也是最低效)的是使用rbind:

data <-  rbind(data, ANS$coefficients)

只要你没有运行大量数据,这就没问题了。

有关更快,更有效的方法的讨论,请阅读上一个问题 - Growing a data.frame in a memory efficient manner

答案 1 :(得分:0)

我试图简化你的代码。您不需要dp个变量。您可以使用rbind向数据框添加行,然后调整线性模型。

由于我不确切知道acadfull是什么,我无法测试代码,但希望它能够正常运行。

c <- 3  # set the initial numbers
i <- 1

data <- data.frame()

while (i < 123 ) {     #loop

  ANS <- lm(acadfull$caco ~ acadfull[c])

  data <-  rbind(data, ANS$coefficients)

  c <- c+1  
  i <- i+1

  if (i==123)
    break    
}

write.csv(c(snp,pos,data),"reg_results", row.names=F)

您甚至可以通过更改i声明来放弃if变量:

if (c == 126)
  break