Я пытаюсь вычислить угол между двумя векторами, где оба находятся в одном кадре данных, но каждый кадр данных находится в списке. Вот что я попробовал с MRE.
rm(list=ls())
coords <- rnorm(10)
x.h <- rnorm(10)
y.h <- rnorm(10)
liklihood.h <- rnorm(10)
x.MB <- rnorm(10)
y.MB <- rnorm(10)
x.a <- rnorm(10)
y.a <- rnorm(10)
day1 <- data.frame(coords,x.h,y.h,liklihood.h,x.MB,y.MB,x.a,y.a)
coords <- rnorm(10)
x.h <- rnorm(10)
y.h <- rnorm(10)
liklihoo.d.h <- rnorm(10)
x.MB <- rnorm(10)
y.MB <- rnorm(10)
x.a <- rnorm(10)
y.a <- rnorm(10)
day2 <- data.frame(coords,x.h,y.h,liklihood.h,x.MB,y.MB,x.a,y.a)
data <- list(day1,day2)
angle <- function(x,y){
dot.prod <- x%*%y
norm.x <- norm(x,type="2")
norm.y <- norm(y,type="2")
theta <- acos(dot.prod / (norm.x * norm.y))
as.numeric(theta)
}
append_angles <- function(df1){
vect1 = c((df1$x.h-df1$x.MB),(df1$y.h-df1$y.MB))
vect2 = c((df1$x.a-df1$x.MB),(df1$y.a-df1$y.MB))
df1$theta = (angle(vect1, vect2)*(180/pi))
return(df1)
}
data <- mapply(append_angles, data, SIMPLIFY = FALSE)
В итоге я получаю первое значение из расчета, повторенного для каждого кадра данных, вместо вычисления для каждой строки. Как мне сделать так, чтобы он вычислял значение для каждой строки?