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)
答案 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)
我试图简化你的代码。您不需要d
和p
个变量。您可以使用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