按行名和列名访问矩阵,如果不可用,则返回零

时间:2018-11-18 23:30:04

标签: r matrix zero

我有一个矩阵,行名和列名分别为:

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

例如,我可以按行名和列名访问矩阵元素

a["x","y"]

当我键入a [“ x”,“ z”]时,它给我一个错误“ a [” x“,” z“]中的错误:下标超出范围”,应该是。

我的问题是我怎么能得到零而不是那个错误。更确切地说,当我键入错误的行名或不在行名(a)或colnames(a)中的列名时,它将返回一个固定值,例如零。例如,对于a [“ x”,“ z”],a [“ z”,“ t”],...,为零。

3 个答案:

答案 0 :(得分:2)

将其包装在tryCatch中。不使用任何软件包:

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

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

答案 1 :(得分:1)

我们可以用tryCatch中的possiblypurrr包装以实现此目的

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

答案 2 :(得分:1)

您可以使用match来确保返回NA

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

a[match("x",rownames(a)), match("z",colnames(a))]
#[1] NA