矢量化大型循环在R中

时间:2015-09-30 20:32:23

标签: r

我正在尝试在R中对一个大的for循环进行矢量化.sdata帧有300万个观测值和26个变量(我不能在这里上传)。

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,]也不起作用。

1 个答案:

答案 0 :(得分:0)

你如何定义gazedist?上面的代码可以假设sdata是data.frame,而gazedist定义为gazedist <- matrix(nrow=nrow(sdata), ncol = setsize)