问题
Please, consider the following code:
x <- c('dog', 'cow', 'horse', 'rabbit', 'bear', 'seal', 'lion', 'ostrich','cat', 'hamster')
y <- c('beaver', 'crow', 'donkey', 'lion', 'bear', 'fox', 'moose', 'mole')
mtx <- matrix(
data = apply(
X = expand.grid(
'x' = x,
'y' = y
),
MARGIN = 1,
FUN = function(df) {
identical(df[['x']], df[['y']])
}
),
nrow = length(x)
)
Result
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
[6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[7,] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
[8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
As you can see, I'm constructing a boolean matrix based on if there's a match between the elements in vector x
and y
. My real life vectors are of length 4000
and 30000
, so I need something that is far more efficient.
Thank you!
来源:https://stackoverflow.com/questions/64104342/efficient-ways-of-creating-matrix-based-on-vector-matches