May be you can simplify your approach by using directly which
and arr.ind
parameter.
data <- data.frame(a = c(0:10), b = c(5:15), c = c(10:20), d = c(1:5, 15:20))
ind <- which(data == max(data), arr.ind = TRUE)
ind
## row col
## [1,] 11 3
## [2,] 11 4
names(data)[ind[,2]]
## [1] "c" "d"
EDIT
To have the same results per row
lapply(apply(data, 1, function(x) which(x == max(x), arr.ind = TRUE)), names)
## [[1]]
## [1] "c"
## [[2]]
## [1] "c"
## [[3]]
## [1] "c"
## [[4]]
## [1] "c"
## [[5]]
## [1] "c"
## [[6]]
## [1] "c" "d"
## [[7]]
## [1] "c" "d"
## [[8]]
## [1] "c" "d"
## [[9]]
## [1] "c" "d"
## [[10]]
## [1] "c" "d"
## [[11]]
## [1] "c" "d"