Deepayan is correct, but note that I() creates a column of class "AsIs", not "character". We should ask why you want character columns in a data frame? (Certainly prior to 1.8.0 there is a fair chance that unless they are of class "AsIs" manipulations would turn them into factors.)
If you really want character columns, the way to do it is underhand: f <- function() { a <- list(Int1=1:5,Char1=letters[1:5],Char2=letters[6:10]) attr(a, "row.names") <- 1:5 attr(a, "class") <- "data.frame" a } However, you might consider returning a list. On Tue, 2 Sep 2003, Deepayan Sarkar wrote: > > >From ?data.frame: > > Character variables passed to 'data.frame' are converted > to factor columns unless protected by 'I'. If a list or data frame > or matrix is passed to 'data.frame' it is as if each column had > been passed as a separate argument. > > See the Examples section for an example. > > On Tuesday 02 September 2003 17:30, Dutky, Steve wrote: > > I have a function that manipulates a list of numeric and character > > components of equal length and wants to return a data.frame. > > > > EG, > > > > f<-function() { > > a<-list(Int1=1:5,Char1=letters[1:5],Char2=letters[6:10]) > > b<-data.frame(a) > > } > > > > How can I get the columns Char1, Char2, (...CharN) returned coerced to > > character and not factor? > > > > It appears that I could coerce individual columns by > > b$CharI<-as.character(b$CharI). Is there a less ugly way of doing this? > > ______________________________________________ > [EMAIL PROTECTED] mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > > -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help