#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