我正在做一些小的计算和我决定来一补data.table
里面的数据,因为它比data.frame
和rbind
快得多当奇怪的错误有R使用data.table
所以基本上我的代码是类似的东西:
df
是用于计算的data.frame
,但它的含义很重要。
l=12000
dti = 1
dt = data.table(ni = 0, nj = 0, regerr = 0)
for (i in seq(1,12000,200)) {
for (j in seq(1, 12000, 200)) {
for (ind in 1:nrow(df)) {
if(i+j >= l/2){
df[ind,]$X = df[ind,]$pos * 2
} else {
df[ind,]$X = df[ind,]$pos/l
}
}
for (i in 1:100) { # 100 sample
sample(df$X,nrow(df), replace=FALSE)
fit=lm(X ~ gx, df) #linear regression calculation
regerror=sum(residuals(fit)^2)
print(paste(i,j,regerror))
set(dt,dti,1L,as.double(i))
set(dt,dti,2L,as.double(j))
set(dt,dti,3L,regerror)
dti=dti+1
}
}
}
的代码打印前几轮的print(paste(i,j,regerror))
然后将它与这个错误退出:
*** caught segfault ***
address 0x3ff00008, cause 'memory not mapped'
Segmentation fault (core dumped)
编辑
structure(list(ax = c(-0.0242214, 0.19770304, 0.01587302, -0.0374415,
0.05079826, 0.12209738), gx = c(-0.3913043, -0.0242214, -0.4259067,
-0.725, -0.0374415, 0.01587302), pos = c(11222, 13564, 16532,
12543, 12534, 14354)), .Names = c("ax", "gx", "pos"), row.names = c(NA,
-6L), class = "data.frame")
任何想法表示赞赏。
@Arun其中由我一个错误,书写时的问题,但基本功能计算这个循环里面的东西(它是写我计算的东西)的两个I指数,然后我洗牌,对洗牌数据进行回归,然后保存在data.table – ifreak 2013-02-08 14:41:19
如果您想提供[可重现的代码](http://stackoverflow.com/questions/5963269/how-to-make-a-伟大的 - 可重现的例子)我想你可能会得到答案。我相信三个for循环并不是你所做的最有效的技术。就目前而言,我不能完全了解那里发生的事情,而不知道“df”是什么,并且至少知道一些关于你最内层for循环中发生的事情。 – Justin 2013-02-08 15:06:12
@Justin我已经更新了我的问题与df数据框和最内层循环内的代码.. – ifreak 2013-02-08 15:21:57