1 min read

Beware of grep with a list

Another R tip: beware of as.character applied to a list.

> as.character( list(letters[1:3], letters[4:6]) )
[1] "c(\"a\", \"b\", \"c\")" "c(\"d\", \"e\", \"f\")"

Really, beware of grep with a list:

> grep("c", list(letters[1:3], letters[4:6]))
[1] 1 2

You might have thought that the result would be just 1, but grep expects a vector of character strings. If the input is not that, it uses as.character(). Since the result of that starts with "c(", grep finds "c" in each.

See the related discussion (from Sept 2011) on stackoverflow.