there are some problems in the code in response to Jilber, you need to change a bit, it should be like this (R version 3.1.2):
both works (note the difference between the initial letters of these two functions: "W" and "w")
first
Which.names <- function(DF, value){ ind <- which(DF==value, arr.ind=TRUE) for (i in 1:nrow(ind)) print(paste(rownames(DF)[ind[i,"row"]], colnames(DF)[ind[i,"col"]], sep=', ')) }
2nd (best)
which.names <- function(DF, value){ ind <- which(DF==value, arr.ind=TRUE) print(paste(rownames(DF)[ind[,"row"]], colnames(DF)[ind[,"col"]], sep=', ')) }
result below
> DF <- read.table(text="ABC + rowname1 4.5 4 3.2 + rowname2 3 23 9", header=TRUE) > DF ABC rowname1 4.5 4 3.2 rowname2 3.0 23 9.0 > Which.names(DF,3) [1] "rowname2, A" > which.names(DF,3) [1] "rowname2, A" > Which.names(DF,4) [1] "rowname1, B" > which.names(DF,4) [1] "rowname1, B" > Which.names(DF,9) [1] "rowname2, C" > which.names(DF,9) [1] "rowname2, C" > DF[1,1] <-3.0 > DF ABC rowname1 3 4 3.2 rowname2 3 23 9.0 > Which.names(DF,3) [1] "rowname1, A" [1] "rowname2, A" > which.names(DF,3) [1] "rowname1, A" "rowname2, A" > DF[1,2] <- 3 > DF ABC rowname1 3 3 3.2 rowname2 3 23 9.0 > Which.names(DF,3) [1] "rowname1, A" [1] "rowname2, A" [1] "rowname1, B" > which.names(DF,3) [1] "rowname1, A" "rowname2, A" "rowname1, B"