2014-03-04 3 views
1

У меня есть две матрицы A и B. Матрица B является матрицей с двумя столбцами, каждая строка содержит один индекс элемента в матрице A. Я хочу изменить эти элементы в матрице A, которые индексируются каждой строкой в ​​матрице B , до 0.Как изменить элементы в одной матрице, индексированной в другой матрице?

Есть ли способ избежать использования цикла, показанного ниже?

> A <- matrix(1:12, 3, 4) 
> B <- matrix(c(1, 2, 2, 2, 3, 4), byrow = TRUE, ncol = 2) 
> A 
    [,1] [,2] [,3] [,4] 
[1,] 1 4 7 10 
[2,] 2 5 8 11 
[3,] 3 6 9 12 
> B 
    [,1] [,2] 
[1,] 1 2 
[2,] 2 2 
[3,] 3 4 
> for (i in 1:nrow(B)) { 
+  A[B[i, 1], B[i, 2]] <- 0 
+ } 
> A 
    [,1] [,2] [,3] [,4] 
[1,] 1 0 7 10 
[2,] 2 0 8 11 
[3,] 3 6 9 0 

ответ

3

Это сделано как этот

A[B] <- 0; 
+0

Честно говоря, не думаю, что это будет работать. Потрясающие! – stanekam

+0

Это действительно хороший способ подмножества. Вы можете прочитать больше в '? ['/'Details' /' Матрицы и массивы'. – Henrik

+0

Никогда не думал об этом. Большое спасибо! –

Смежные вопросы