2015-09-30 108 views
0

我試圖在R中向量化一個大的for循環.sdata幀有300萬觀察值和26個變量(我不能在這裏上傳)。向量化R中的大循環

setsize <- 6 
eccent <- 150 
ctrX <- 400 
ctrY <- 300 

xyrotate <- function(x,y,ctrX,ctrY,angle){ 
    distX <- x - ctrX; 
    distY <- y - ctrY; 
    radians <- angle * (pi/180); 
    rotX <- ctrX + (distX*cos(radians)) - (distY*sin(radians)); 
    rotY <- ctrY + (distX*sin(radians)) + (distY*cos(radians)); 
    coordinates <- list("X" = rotX,"Y" = rotY) 
    return(coordinates) 
} 

loc <- data.frame(x = numeric(setsize), 
       y = numeric(setsize)) 
loc$x[1] <- ctrX 
loc$y[1] <- ctrY - eccent 
for(i in 2:setsize){ 
    coord <- xyrotate(loc$x[1], loc$y[1],ctrX,ctrY,(i-1)*(360/setsize)) 
    loc$x[i] <- coord$X 
    loc$y[i] <- coord$Y 
} 
for(d in 1:setsize){ 
    x <- sdata$RIGHT_GAZE_X-loc$x[d] 
    y <- sdata$RIGHT_GAZE_Y-loc$y[d] 
    gazedist[,d] <- sqrt(x^2+y^2) 
} 

有了這個代碼,我不斷收到錯誤:

Error in gazedist[, d] <- sqrt(x^2 + y^2) : 
    incorrect number of subscripts on matrix 

關於如何解決它的任何想法? gazedist [d,]也不起作用。

+0

需要知道'nrow(sdata)'是否恰好是3MM並且是什麼'setsize'等於,並且「members」是否意味着「行」? 'str(凝視)'顯示什麼? –

回答

0

你如何定義凝視者?上面的代碼假設sdata是一個data.frame,並且凝視者被定義爲gazedist <- matrix(nrow=nrow(sdata), ncol = setsize)

+0

好的,完成了。 – Nick

+0

你如何定義凝視者?上面的代碼假設sdata是一個data.frame,並且凝視者被定義爲'gazedist < - matrix(nrow = nrow(sdata),ncol = setsize)' – devmacrile

+1

這很奏效。我沒有定義它是問題。 :P – Nick