Я написал следующую функцию, в которой я хочу вычислить угол между двумя векторами, которые я ввожу
theta <- function(a,b) {
angle <- (180/pi)*acos( sum(a*b) / ( sqrt(sum(a * a)) * sqrt(sum(b * b)) ) )
return(angle)
}
Я пытаюсь применить эту функцию к 5 подобным кадрам данных отдельно. Для каждого фрейма данных в каждой строке хранится информация о наблюдении, а 4 из столбцов фрейма данных представляют 4 координаты 4D-вектора, который определяет свойство каждого наблюдения
Для всех строк я хочу найти уголмежду вектором a, извлеченным из 4 столбцов, и вектором b, еще один 4-мерный вектор, который я хочу указать. Вектор b различен для каждого кадра данных.
Я использую метод apply и вызываю созданную мной ранее функцию для вычисления угла между двумя векторами и сохраняю его в новом столбце под названием angle.
df$angle <- apply(df[,c(7:10)],1, theta))
Однако я не уверен, как использовать метод apply таким образом, чтобы я мог вручную указать вектор угла b при вызове моей функции "theta". Вот почему мне пришлось прибегнуть к предварительному определению значения вектора b, когда функция определяется сама, как это:
theta <- function(a,b) {
b= c(1,2,3,4)
angle <- (180/pi)*acos( sum(a*b) / ( sqrt(sum(a * a)) * sqrt(sum(b * b)) ) )
return(angle)
}
Проблема в том, что у меня есть 5 разных фреймов данных, где у меня 5разные векторы b, я должен каждый раз определять функцию с новым b, прежде чем применить ее к кадру данных.
Любая помощь будет принята с благодарностью!