Hi Ed, Because that's the default for data.frame(), and a lot of people trip over it just as you did. It's an easy fix:
R> data(iris) R> iris <- data.frame(iris, annot=c(""), stringsAsFactors=FALSE) R> iris[1,"annot"]<-"annotation" Thanks for the very useful reproducible example. Sarah On Wed, Aug 28, 2013 at 4:56 PM, Ed Siefker <ebs15...@gmail.com> wrote: > I have a table, and I want a new column to add some annotations to. > But it ends up as a factor instead of characters, and won't let me add > arbitrary text. > >> data(iris) >> iris<-data.frame(iris,annot=c("")) >> iris[1,"annot"]<-"annotation" > Warning message: > In `[<-.factor`(`*tmp*`, iseq, value = "annotation") : > invalid factor level, NAs generated >> class(iris[,"annot"]) > [1] "factor" >> class(c("")) > [1] "character" > > Why is c("") a character, but when I add it to a data frame it's a factor? > What am I missing? Is there a better way to add a new column to > a data frame? > -- Sarah Goslee http://www.functionaldiversity.org ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.