2016-01-05 2 views
7

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

Предположим, что у меня есть простая матрица («m»), которую я хочу индексировать с помощью другой логической матрицы («i»), сохраняя исходную структуру матрицы неповрежденной. Что-то вроде этого:

# original matrix 
m <- matrix(1:12, nrow = 3, ncol = 4) 

# logical matrix 
i <- matrix(c(rep(FALSE, 6), rep(TRUE, 6)), nrow = 3, ncol = 4) 

m 
i 

# Desired output: 
matrix(c(rep(NA,6), m[i]), nrow(m), ncol(m)) 
# however this seems bad programming... 

Использование m[i] возвращает вектор и не матрица. Каков правильный способ достичь этого?

+1

Я принял намерение присвоить NA из указанного результата и из того, что оба его решение и мой помощник дали тот же результат. –

ответ

7

Оригинальный плакат добавлен комментарий о том, что он понял, решение, то почти сразу же удалил:

m[ !i ] <- NA 

я начал ответ, который предложил несколько иное решение, используя функцию is.na<-:

is.na(m) <- !i 

Оба решения кажутся разумным R-кодом, который основан на логическом индексировании. (Матричная структура i на самом деле не основана. Вектор правильной длины и записей также сохранил бы матричную структуру m.)