check whether matrix rows equal a vector in R , vectorized

前端 未结 3 573
刺人心
刺人心 2021-01-17 22:06

I\'m very surprised this question has not been asked, maybe the answer will clear up why. I want to compare rows of a matrix to a vector and return whether the row == the v

3条回答
  •  我在风中等你
    2021-01-17 22:55

    One possibility is

    rowSums(M == v[col(M)]) == ncol(M)
    ## [1] FALSE FALSE FALSE FALSE  TRUE
    

    Or simlarly

    rowSums(M == rep(v, each = nrow(M))) == ncol(M)
    ## [1] FALSE FALSE FALSE FALSE  TRUE
    

    Or

    colSums(t(M) == v) == ncol(M)
    ## [1] FALSE FALSE FALSE FALSE  TRUE
    

    v[col(M)] is just a shorter version of rep(v, each = nrow(M)) which creates a vector the same size as M (matrix is just a vector, try c(M)) and then compares each element against its corresponding one using ==. Fortunately == is a generic function which has an array method (see methods("Ops") and is.array(M)) which allows us to run rowSums (or colSums) on it in order to makes sure we have the amount of matches as ncol(M)

提交回复
热议问题