This seems to have worked for me:
> df <- data.frame(a=1:10, b=1:10, c=1:10)
> str(df)
`data.frame': 10 obs. of 3 variables:
$ a: int 1 2 3 4 5 6 7 8 9 10
$ b: int 1 2 3 4 5 6 7 8 9 10
$ c: int 1 2 3 4 5 6 7 8 9 10
> df.names <- attr(df,"names")
> factors <- 'c'
> sapply(factors, function (name) {
+ pos <- match(name,df.names)
+ if (is.na(pos)) stop(paste(name,": no such column\n"))
+ df[[pos]] <<- factor(df[[pos]])
+ cat(name,"(",pos,"):",is.factor(df[[pos]]),"\n")
+ })
c ( 3 ): TRUE
$c
NULL
> cat("factors:",sapply(df,is.factor),"\n")
factors: FALSE FALSE TRUE
> str(df)
`data.frame': 10 obs. of 3 variables:
$ a: int 1 2 3 4 5 6 7 8 9 10
$ b: int 1 2 3 4 5 6 7 8 9 10
$ c: Factor w/ 10 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10
>
On 5/11/06, Sam Steingold <[EMAIL PROTECTED]> wrote:
>
> > * jim holtman <[EMAIL PROTECTED]> [2006-05-11 12:27:39 -0400]:
> >
> > try '<<-' as the assignment to make it global.
> >
> > df[[pos]] <<- factor(df[[pos]])
>
> nothing changed -- I observe the exact same behaviour:
>
> Month ( 1 ): TRUE
> factors: FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>
>
> > On 5/11/06, Sam Steingold <[EMAIL PROTECTED]> wrote:
> >>
> >> Hi,
> >> I have a data frame df and a list of names of columns that I want to
> >> turn into factors:
> >>
> >> df.names <- attr(df,"names")
> >> sapply(factors, function (name) {
> >> pos <- match(name,df.names)
> >> if (is.na(pos)) stop(paste(name,": no such column\n"))
> >> df[[pos]] <- factor(df[[pos]])
> >> cat(name,"(",pos,"):",is.factor(df[[pos]]),"\n")
> >> })
> >> cat("factors:",sapply(df,is.factor),"\n")
> >>
> >> the output is:
> >>
> >>
> >> Month ( 1 ): TRUE
> >> factors: FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> >>
> >>
> >> i.e., there is a column named "Month" (the 1st column), and it is
> indeed
> >> turned into a factor inside sapply(), but after that it is numerical
> >> again!
> >>
> >> what am I doing wrong?
>
> --
> Sam Steingold (http://www.podval.org/~sds) on Fedora Core release 5
> (Bordeaux)
> http://pmw.org.il http://ffii.org http://memri.org
> http://palestinefacts.org
> http://truepeace.org http://mideasttruth.com http://dhimmi.com
> If you're being passed on the right, you're in the wrong lane.
>
> ______________________________________________
> [email protected] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>
--
Jim Holtman
Cincinnati, OH
+1 513 646 9390 (Cell)
+1 513 247 0281 (Home)
What is the problem you are trying to solve?
[[alternative HTML version deleted]]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html