简体   繁体   English

向量化R中的大For循环

[英]Vectorizing Large For Loop in R

I am trying to vectorize a large for loop in R. The sdata frame has 3 million observations and 26 variables (I can't upload it here). 我正在尝试对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)
}

With this code, I keep getting the error: 有了这段代码,我不断收到错误:

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

Any ideas on how to fix it? 关于如何解决它的任何想法? gazedist[d, ] does not work either. gazedist [d,]也不起作用。

How do you define gazedist? 您如何定义gazedist? Your code above works assuming sdata is a data.frame, and gazedist is defined as gazedist <- matrix(nrow=nrow(sdata), ncol = setsize) 上面的代码假设sdata是data.frame,并且gazedist定义为gazedist <- matrix(nrow=nrow(sdata), ncol = setsize)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM