我正在做一些小的計算和我決定來一補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