[R] variable substitution in for loops
David Winsemius
dwinsemius at comcast.net
Thu Feb 25 04:19:38 CET 2010
On Feb 24, 2010, at 9:18 PM, Jon Erik Ween wrote:
>
> David
>
> Thanks for your suggestions. "Reproducible examples", my datasets
> are too
> big so I'm not sure what you would want to see.
I _wanted_ to see a datasset that had maybe 10 variables and 20 rows
and a stripped down varslist that had maybe half that number of
variable names.
> Anyway, does this help:
>
> dataset:
> Perf_Index Age risk_score gender hight IQ ...
> 12 78 10 m 6 110 ...
> 10 77 9 f 6 97 ...
> 5 64 f 13 5 120 ...
> ...
You _could_ have offered str(dataset)
>
> varslist:
> Perf_Index Age IQ ...
>
>
> As you suggested
>
>> str(varslist)
> 'data.frame': 1 obs. of 54 variables:
> $ V1 : Factor w/ 1 level "Perf_Index": 1
> $ V2 : Factor w/ 1 level "Age": 1
> $ V3 : Factor w/ 1 level "risk_score": 1
> ...
And it does explain why you were not getting the results you were
expecting. "varslist" is not a simple list. You have a dataframe (a
special sot of list) of 54 single element factors, rather than either
a vector with 54 elements or a list with 54 character elements.
>
> for (i in varslist){
> v<-mean(Dataset[,i])
> print(v)
> }
>
> gives:
>
>> source("/Users/jween/Desktop/test.R")
> [1] 20016.06
> [1] 20016.06
> [1] 20016.06
> [1] 20016.06
> [1] 20016.06
> [1] 20016.06
> ... 54 instances, the number of variables in varslist
>
> Not correct, obviously.
Obviously, ... but not my fault. You are the one who constructed
varslist that way. The factors are being interpreted as numbers and
since each of them have only a single element, they are all the number
1. You might try to wrap as.character() around the call to varslist in
the "in" phrase. That way the _levels_ of the factors would be
returned, rather than their representation index.
--
David.
> I'm guessing I've not read varslist in correctly (I
> used read.table).
>
> Cheers
>
> Jon
> --
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
More information about the R-help
mailing list