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.

Advertisements

Tags: , ,

One Response to “Beware of grep with a list”

  1. isomorphismes Says:

    I wonder if this is related to class( unlist( x )) == "list"….

Comments are closed.