Вычисления внутри матрицы с внутренними ссылками, привязанными к столбцам матрицы в R

#r #matrix #calculated-columns

#r #матрица #вычисляемые столбцы

Вопрос:

У меня есть матрица, и я хотел бы выполнить вычисление для каждого числа в матрице, чтобы получить другую матрицу с теми же размерами только с результатами вычисления. Это должно быть легко, за исключением того, что часть уравнения зависит от того, к какому столбцу я обращаюсь, потому что мне нужно будет иметь внутреннюю ссылку на число в строке [3,] в этом столбце.

Уравнение, которое я хотел бы применить, является: output matrix value = input_matrix value at a given position (1- (matrix value at [3,] and in the same column as the input matrix value))

Например, для (1,1) в матрице вычисление будет равно 1 (1-3)

Для позиции (1,2) в матрице вычисление будет равно 5 (1-7)

 input_matrix<- matrix(1:12, nrow = 4, ncol = 3)

     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12
 

Выходная матрица должна выглядеть следующим образом:

      [,1] [,2] [,3]
[1,]    -1   -1  -1
[2,]    0    0   0
[3,]    1    1   1
[4,]    2    2   2
 

Я пытался сделать что-то вроде этого:

 output_matrix<-apply(input_matrix,c(1,2), function(x) x (1-(input_matrix[3,])))
 

но это дает мне три матрицы с неправильными размерами в качестве выходных данных.

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

Любая помощь была бы весьма признательна.

Ответ №1:

Я думаю, это должно сработать для вас:

 apply(input_matrix, margin = 2, function(x) x   (1 - x[3]))
     [,1] [,2] [,3]
[1,]   -1   -1   -1
[2,]    0    0    0
[3,]    1    1    1
[4,]    2    2    2
 

Комментарии:

1. Это сработало отлично! Большое вам спасибо!

Ответ №2:

Мы также могли бы сделать это векторизованным способом

 input_matrix   (1 - input_matrix[3,][col(input_matrix)])
#     [,1] [,2] [,3]
#[1,]   -1   -1   -1
#[2,]    0    0    0
#[3,]    1    1    1
#[4,]    2    2    2