R: неоднократно применять функцию к соответствующим элементам матриц и собирать результат - PullRequest
0 голосов
/ 30 января 2019

Я хотел бы применить некоторую функцию к соответствующим элементам некоторых матриц (одинакового размера) и вернуть результат каждого приложения, чтобы я мог добавить его к некоторому аккумулятору.Наиболее интуитивный способ сделать это с помощью цикла, но я работаю с большими наборами данных, и циклы занимают слишком много времени.

Я знаю о классе применения apply, но я неЯ уверен, как использовать их для накопления результата каждой итерации.

Вот небольшой пример того, что я пытаюсь сделать.

mat <- matrix(c(0, 1, 2, 3, 2, 9, 5, 1, 1, 1, 0, 0, 5, 5, 2, 0), 4, 4)
mat2 <- matrix(c(1, 1, 3, 1, 6, 2, 9, 2, 0, 1, 3, 2, 0, 1, 2, 1), 4, 4)
mat3 <- matrix(c(0, 4, 6, 1, 0, 4, 3, 8, 9, 1, 3, 0, 9, 9, 8, 8), 4, 4)

some_function <- function(num1, num2, num3) {
  return(num1 * num2 + num3)    
}

accum <- 0.1
for (i in 1:nrow(mat)) {
  for (j in 1:ncol(mat)) {
    accum <- accum + log(1 + some_function(mat[i,j], mat2[i,j], mat3[i,j]+10))
  }
}

Это дает правильный ответ, но яхотел бы сделать это без петель.Также обратите внимание, что some_function - это просто произвольная функция, которую я привожу в качестве примера.Функция, которую я применяю к своим данным, более сложна.

1 Ответ

0 голосов
/ 30 января 2019

Вам не нужно подавать заявку на это, просто запустите функцию.

accum <- 0.1+sum(log(1+(some_function)(mat,mat2,mat3+10)))

намного быстрее и чище.

...