2015-09-30 4 views
0

Я пытаюсь векторизовать большой цикл цикла в R. Рамка sdata имеет 3 миллиона наблюдений и 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 и является ли это то, что «устанавливает» равно и «члены» вы имеете в виду «строка»? Что показывает 'str (gazedist)? –

ответ

0

Как вы определяете gazedist? Ваш код выше работает, предполагая, что sdata является data.frame, а gazedist определяется как gazedist <- matrix(nrow=nrow(sdata), ncol = setsize)

+0

Хорошо, все готово. – Nick

+0

Как вы определяете gazedist? Ваш код выше работает, если sdata является data.frame, а gazedist определяется как 'gazedist <- matrix (nrow = nrow (sdata), ncol = setsize)' – devmacrile

+1

Это сработало. Я не определял, что это была проблема. :П – Nick

Смежные вопросы