A <- matrix(sample(1:10, 20, TRUE), 5, 4)
fn.Calc <- function(a,b){(a-b)/a}
B <- matrix(NA, nrow(A), ncol(A)-1)
for (ir in 1:nrow(B)){
for (ic in 1:ncol(B)){
B[ir, ic] <- fn.Calc(A[ir, ic+1], A[ir, ic])
}
}
небольшое примечание: при работе со случайными функциями приветствуется предоставление начального числа;)
Итак, что у нас здесь: fn.Calc
- это просто расчет, который вы пытаетесь выполнить, я выделил это в функции, чтобы при необходимости было легче изменить
, тогда создается новая матрица B, имеющая на 1 столбец меньше, чем A, но те же строки
, наконец, мы собираемся l oop каждый элемент в этой матрице B, мне нравится использовать ir
для инкрементных строк и ic
для инкрементного столбца и, наконец, внутри l oop (B[ir, ic] <- fn.Calc(A[ir, ic+1], A[ir, ic])
), когда происходит magi c там, где фактически значения вычисляются и сохраняются в B
, это очень простой c подход без вызова какого-либо пакета, вероятно, есть много других способов решить эту проблему, которые требуют меньше кода.