私は次の機能を持っています:
calculateAngle <- function(x, y)
{
v <- c(x, y)
a <- c(1, 0)
theta <- acos( sum(a*v) / ( sqrt(sum(a * a)) * sqrt(sum(v * v)) ) )
if(v[[2]] < 0)
{
return(-1 * theta)
}
else
{
return(theta)
}
}
これは、x と y の値を取り、そのベクトルと 1、0 のベクトルの間の角度を計算します。この関数は、これらの例でうまく機能します。
> calculateAngle(0, 1)
[1] 1.570796
> calculateAngle(0, -1)
[1] -1.570796
> calculateAngle(0, -10)
[1] -1.570796
> calculateAngle(rnorm(1), rnorm(1))
[1] -0.2600444
しかし、データフレームの列を渡そうとすると、各行の角度が必要な場合に単一の値が返されます。
df <- data.frame(x=rnorm(10), y=rnorm(10))
df$angle <- calculateAngle(df$x, df$y)
助けていただければ幸いです。