[R] Outputing multilple subsets
David Winsemius
dwinsemius at comcast.net
Mon Nov 9 15:33:33 CET 2009
On Nov 9, 2009, at 8:45 AM, rusers.sh wrote:
> Hi Johann,
> Excellent. That is what i really want. A little problem is why the
> "c.n"
> does not exist. Should the "c.n" in the memory? Sometimes, i also
> hope to
> see "c.n" directly in R besides exporting. Could i see the "c.n"
> with some
> function in the loops?
>> a<-c(1:10)
>> b<-c(rep(1,3),rep(2,3),rep(3,4))
>> c<-data.frame(a,b) #c is the example data
And not a particularly good choice for a variable name by virtue of
potential "wetware confusion" with the concatenate function, c(.)
>> num<-c(unique(b))
>> for (n in num) {
> + c.n <- c[c$b==n,]
> + write.csv(c.n, file=paste("c:/c_", n, ".csv", sep=""))}
>> num
> [1] 1 2 3
>> c.1
> Error: object 'c.1' not found
And you were apparently expecting variables "c.1", "c.2", and "c.3" to
be constructed in that loop? That is way beyond the R-interpreter's
currently level of integration with the device drivers reading input
from the electroencephalograph that must be sitting on your machine.
Perhaps you could have succeeded with:
dftemp <- list() # outside the loop, need a list because results of
the extract operation will be a df.
..........
dftemp[[n]] <- c[c$b == n, ] # inside the loop
write.csv(dftemp[[n]], file=paste("c:/c_", n, ".csv", sep=""))}
The fact that you immediately wrote it to a file that did not store
its name would make creation of a list unnecessary inside the loop,
but it would store the results in a form that could be examined later
from the command line.
>> c.2
> Error: object 'c.2' not found
>> c.3
> Error: object 'c.3' not found
>
> Thanks a lot.
> -----------------
> Jane Chang
> Queen's
>
>
>
> 2009/11/9 Johann Hibschman <johannh at gmail.com>
>
>> On Nov 8, 2009, at 7:23 PM, rusers.sh wrote:
>>
>> for (i in num) {
>>> c_num<-c[c$b==num,]
>>> write.csv(c_num,file="c:/c_num.csv")
>>> }
>>>
>>> Warning messages:
>>> 1: In c$b == num :
>>> longer object length is not a multiple of shorter object length
>>>
>>
>> This is because you're comparing column b to the entire vector of
>> numbers
>> (num), not the current number in the iteration (i). The first line
>> of the
>> loop should be "c_num<-c[c$b==i,]".
>>
>> From a style point of view, I'd use "n" as my variable, since "i"
>> is too
>> commonly used as an integer index.
>>
>> Also, you will be overwriting the same file, called "c_num.csv", on
>> each
>> iteration.
>>
>> You should try something more like:
>>
>> for (n in num) {
>> c.n <- c[c$b==n,]
>> write.csv(c.n, file=paste("c:/c_", n, ".csv", sep="")
>> }
>>
>> I hope that helps.
>>
>> Cheers,
>> Johann Hibschman
>>
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
More information about the R-help
mailing list