[R] Outputing multilple subsets

jim holtman jholtman at gmail.com
Mon Nov 9 15:21:23 CET 2009


You only have the object 'c.n' in the loop.  c.1, c.2 & c.3 are not
created.  You have some file names by a similar name.  If you want to
keep the values from the loop, use lapply:

result <- lapply(seq(num), function(.num){
    c.n <- c[c$b == .num,, drop=FALSE]  # use 'drop' in case there is
only one row
    write.csv(c.n, file=paste("c:/c_", .num, ".csv", sep="")
    c.n  # return the value
})
# 'result' will now be a list of each of the subsets

On Mon, Nov 9, 2009 at 8:45 AM, rusers.sh <rusers.sh at gmail.com> 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
>> 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
>> 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
>>
>>
>>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?




More information about the R-help mailing list