Usually, when *how* turns out to be difficult, it's because of losing sight of *what*.

Every `R`

problem can be thought of with advantage as the interaction of three objects— an existing object, x , a desired object,y , and a function, f, that will return a value of y given x as an argument. In other words, school algebra— f(x) = y. Any of the objects can be composites.

In the code given in the OP, x is a matrix dim 3 8, `m`

and y is a logical vector of length 8. The objective is to populate y according to the equality tests for m[1,][1] == m[2,][2] and m[1,][1] == m[3,][1], which could be generalized to every other row if desired. For this use case, `colSums`

is convenient, but not necessary. An alternative is presented below. Understand the application of the arguments to the subset operator, `[`

— `m[,]`

subsets everything, `m[1,]`

returns all columns for row 1, `m[,1] returns all rows for column 1, `

m[2:3,3:4]`and`

m[c(1,3),c(5,7)]` specified rows and columns.

See the FAQ: How to do a minimal reproducible example `reprex`

for beginners to better frame questions.

```
# final element changed from 0 to 1 to conform to desired output
dat <- c(0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1)
m <- matrix(dat, nrow = 3, ncol = 8)
a_function <- function(x) colSums(x) == 0 | colSums(x) == 3
a_function(m)
#> [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
another_function <- function(x,y) pi * m[y,] > 0
another_function(m,1:3)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#> [1,] FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
#> [2,] FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
#> [3,] FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE
a_third_function <- function(x,y,z) x[y+1,] == x[y+z,]
a_third_function(m,1,2)
#> [1] TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE
```