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