Как сохранить все выходы a для l oop вычисление одновременных уравнений в R - PullRequest
0 голосов
/ 04 августа 2020

Я пишу функцию, в которой первый шаг - оценить, пересекаются ли 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 дает мне ответ, но только первый, и никакого предыдущего моего кода, который работает / другие вопросы о переполнении стека Я обнаружил, что они успешно сохраняют все точки пересечения. Я впервые строю циклы без формального обучения, поэтому я понимаю, что это, вероятно, что-то простое, что я пропустил, тем не менее, я ценю любые отзывы!

Спасибо.

...