【问题标题】:Running loops and receiving an error message运行循环并收到错误消息
【发布时间】:2015-09-29 06:59:14
【问题描述】:
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)

【问题讨论】:

    标签: r


    【解决方案1】:

    我试图简化您的代码。您不需要 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)
    

    您甚至可以通过更改您的 if 语句来丢弃您的 i 变量:

    if (c == 126)
      break
    

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        • 2022-01-23
        • 2013-05-03
        • 2014-04-03
        相关资源
        最近更新 更多