Beware of grep with a list

R-bloggers 2013-04-03

(This article was first published on The stupidest thing... » R, and kindly contributed to R-bloggers)

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.

To leave a comment for the author, please follow the link and comment on his blog: The stupidest thing... » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series,ecdf, trading) and more...