我正在尝试在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,]也不起作用。
答案 0 :(得分:0)
你如何定义gazedist?上面的代码可以假设sdata是data.frame,而gazedist定义为gazedist <- matrix(nrow=nrow(sdata), ncol = setsize)