Я пишу функцию, в которой первый шаг - оценить, пересекаются ли 2 линии. Учитывая, что у меня есть градиент и точка пересечения y для каждой линии, я использую матричную алгебру для вычисления координат x и y пересечения. В моем наборе тестовых данных есть 424 записи, но это не всегда так, поэтому я использую for
l oop в своей функции для прохождения всех строк в моем фрейме данных. Код в l oop выполняется, но только результаты из первой строки моего фрейма данных сохраняются во вновь указанном фрейме данных. Ниже приведен мой текущий код:
angleofint <- function(datfram) {
cat("\n[[--FINDING POINT OF INTERSECTION--]]\n") ## first part of function
POI <- matrix(NA, nrow = nrow(datfram), ncol = 2) ## empty matrix for output
for(i in 1:length(datfram$obs_id)) ## obs_id specifies the number of rows in the dataframe {
X <- matrix((c(1, 1, -(datfram[i, 9]), -(datfram[i, 14]))), nrow = 2, ncol = 2) ## 2x2 matrix
y <- matrix(c(datfram[i, 10], datfram[i, 15]), 2, 1) ## RHS vector of the 2x2 matrix
tempdat <- list(solve(X, y))
tempx <- tempdat[[i]][1,] ## saving the x coord from the solved simultaneous equation
tempy <- tempdat[[i]][2,] ## saving the y coord from the solved simultaneous equation
POI <- bind_cols(tempx, tempy) ## binding the above x and y coordinates in the output matrix
return(POI)
} ## function continues after this
Снова код в этом для l oop дает мне ответ, но только первый, и никакого предыдущего моего кода, который работает / другие вопросы о переполнении стека Я обнаружил, что они успешно сохраняют все точки пересечения. Я впервые строю циклы без формального обучения, поэтому я понимаю, что это, вероятно, что-то простое, что я пропустил, тем не менее, я ценю любые отзывы!
Спасибо.