получить доступ к матрице по именам строк и столбцов и вернуть ноль, если недоступен - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть матрица с именами строк и столбцов в виде:

a = matrix(1:4,2,2)
dimnames(a) = list(c("x","y"),c("x","y"))

У меня может быть доступ к элементам матрицы по именам строк и столбцов, например,

a["x","y"]

Когда я набираю["x", "z"], это дает мне ошибку "Ошибка в [" x "," z "]: индекс за пределами", что должно быть.

Мой вопрос: как я могу получить ноль вместо этой ошибки?Точнее, когда я набираю неправильные имена строк или имена столбцов, которых нет в именах строк (a) или colnames (a), он возвращает фиксированное значение, например ноль.Например, ноль для a ["x", "z"], a ["z", "t"], ....

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Вы можете использовать match, чтобы убедиться, что вместо него возвращается NA:

a[match("x",rownames(a)), match("y",colnames(a))]
#[1] 3

a[match("x",rownames(a)), match("z",colnames(a))]
#[1] NA
0 голосов
/ 19 ноября 2018

Оберните это в tryCatch. Пакеты не используются:

tryCatch(a["x", "y"], error = function(e) 0)
## [1] 3

tryCatch(a["x", "w"], error = function(e) 0)
## [1] 0
0 голосов
/ 19 ноября 2018

Мы можем обернуть tryCatch или possibly из purrr, чтобы это произошло

library(purrr)
f1 <- possibly(function(mat, indx1, indx2) mat[indx1, indx2], otherwise = 0)
f1(a, 'x', 'z')
#[1] 0

f1(a, 'x', 'y')
#[1] 3
...